我有这个方法:
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作为泛型对象,并将var转换为相同的结果?
我对其他建议持开放态度,如果我以错误的方式来做这件事,也会得到同样的结果。
发布于 2012-03-23 22:31:18
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 };
}发布于 2012-03-23 22:31:41
你有没有试过这个:
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>会是更好的选择。
发布于 2012-03-23 22:31:39
我相信这应该行得通。正如您建议的那样,只使用泛型即可。为了在你的方法中获得它,你只需在任何地方改变变量类型(它不一定是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>https://stackoverflow.com/questions/9840940
复制相似问题