Use reflection.
Component new_component = gameObject.AddComponent(old_component.GetType());
foreach (FieldInfo f in old_component.GetType().GetFields())
{
f.SetValue(new_component, f.GetValue(old_component));
}
Use reflection.
Component new_component = gameObject.AddComponent(old_component.GetType());
foreach (FieldInfo f in old_component.GetType().GetFields())
{
f.SetValue(new_component, f.GetValue(old_component));
}