我目前必须使用具有公共属性名称的大型类。子类中的细节是相同的(我无法更改类)。我没有将Amount类重新添加到不同的部分,而是想使用泛型和反射来实例化它。
我有以下代码:
var amountProperty = value.GetType().GetProperty("Amount");
if (amountProperty != null && amountProperty.PropertyType.IsArray)
{
Type amountTypeArray = amountProperty.PropertyType;
Type amountType = amountProperty.PropertyType.GetElementType();
var amountValue = amountProperty.GetValue(value);
if (amountValue == null)
{
amountValue = Activator.CreateInstance(amountTypeArray);
}
else
{
amountValue = IncrementArray<amountType>(amountValue);
}
}
第3行amountValue = IncrementArray<amountType>(amountValue);
在amountType
上有错误。如果我把它放在typeof(amountValue)
中也行不通。 incrementArray
方法是:
protected T[] IncrementArray<T>(T[] arrayIncrement)
{
var sectionCopy = arrayIncrement;
Array.Resize<T>(ref sectionCopy, arrayIncrement.Length + 1);
return sectionCopy;
}
我可能只是错过了一个真正简单的解决方案。
答案 0 :(得分:1)
您需要使用Reflection
来调用IncrementArray<T>
方法。
首先获取MethodInfo
,然后使用MakeGenericMethod
// Assuming incrementMethod is the MethodInfo of IncrementArray<T>
incrementMethod.MakeGenericMethod(amountType).Invoke(amountValue);