使用函数根据传递的类型创建类的实例

时间:2012-03-23 14:26:42

标签: c#

我有这个方法:

internal static void AssignNewArrayItem(ref Xml.CLASSNAME[] Items, Xml.CLASSNAME Item)
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new Xml.CLASSNAME[] { Item };
}

目前我有大约10个重载版本,其中CLASSNAME不同,但它们都完全相同。有没有什么方法可以让CLASSNAME作为通用对象并投射变量以获得相同的结果?

如果我也以错误的方式解决这个问题,我愿意接受其他建议以达到同样的效果。

4 个答案:

答案 0 :(得分:2)

internal static void AssignNewArrayItem<T>(ref T[] Items, T Item)
    {
        if (Items != null)
        {
            Array.Resize(ref Items, Items.Length + 1);
            Items[Items.Length - 1] = Item;
        }
        else
            Items = new T[] { Item };
    }

答案 1 :(得分:2)

你试过这个:

internal static void AssignNewArrayItem<T>(ref T[] Items, T Item)
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new T[] { Item };
}

我认为使用List<T>会是更好的选择。

答案 2 :(得分:1)

我相信这应该有效。正如你自己建议的那样,只需使用泛型。要在你的方法中得到这个,你只需改变任何会有变量类型的地方,括号之间的值(它不一定是T,但这是约定)

internal static void AssignNewArrayItem<T>(ref T[] Items, T Item)
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new T { Item };
}

但是,您应该在方法上添加constraints。你有预期的基本类型吗?如果是这样,你可以这样做:

internal static void AssignNewArrayItem<T>(ref T[] Items, T Item) 
    where T : <base class name>

答案 3 :(得分:0)

您可以使用泛型约束,约束只接受从类Xml.CLASSNAME继承的对象

internal static void AssignNewArrayItem<T>(ref T[] Items, T Item) where T: Xml.CLASSNAME
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new Xml.CLASSNAME[] { Item };
}