泛型类型<;T>;使用Activator

本文关键字:使用 Activator gt 泛型类型 lt | 更新日期: 2023-09-27 18:21:48

我目前必须使用一个具有公共属性名称的大型类。子类中的详细信息是相同的(我无法更改类)。我不想再次将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);
    }
}

最后第三行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;
}

我可能只是错过了一个真正简单的解决方案。

泛型类型<;T>;使用Activator

您需要使用Reflection来调用IncrementArray<T>方法。

首先获取MethodInfo,然后使用MakeGenericMethod

// Assuming incrementMethod is the MethodInfo of IncrementArray<T>
incrementMethod.MakeGenericMethod(amountType).Invoke(amountValue);