34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using UnityEngine;
|
|
|
|
namespace CurrencyChanger2
|
|
{
|
|
public static class X
|
|
{
|
|
public static T CopyPropertiesOf<T>(this T comp, T other) where T : Component
|
|
{
|
|
Type type = comp.GetType();
|
|
if (type != other.GetType()) return null; // type mis-match
|
|
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Default | BindingFlags.DeclaredOnly;
|
|
PropertyInfo[] pinfos = type.GetProperties(flags);
|
|
foreach (var pinfo in pinfos)
|
|
{
|
|
if (pinfo.CanWrite)
|
|
{
|
|
try
|
|
{
|
|
pinfo.SetValue(comp, pinfo.GetValue(other, null), null);
|
|
}
|
|
catch { } // In case of NotImplementedException being thrown. For some reason specifying that exception didn't seem to catch it, so I didn't catch anything specific.
|
|
}
|
|
}
|
|
FieldInfo[] finfos = type.GetFields(flags);
|
|
foreach (var finfo in finfos)
|
|
{
|
|
finfo.SetValue(comp, finfo.GetValue(other));
|
|
}
|
|
return comp as T;
|
|
}
|
|
}
|
|
}
|