我有这个方法:
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
作为通用对象并投射变量以获得相同的结果?
如果我也以错误的方式解决这个问题,我愿意接受其他建议以达到同样的效果。
答案 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 };
}