我为一个类写了一个函数扩展。此extenssion函数返回IList作为结果。 大多数时候我想将IList转换为数组T []。 这需要我声明“使用System.Linq;”在每个将IList转换为T []的类中。 所以为了保存“使用System.Linq;”的声明。我在原始版本的同一类中写了一个扩展名(所以我不必声明“使用”):
public static T[] ToArray<T>(this IList<T> list)
{
return list.ToArray();
}
当然,extenssion类有“使用System.Linq;”,但这是我需要放置此声明的唯一地方。 问题是我从命令“list.ToArray();”得到StackOverflow异常实际上是对自己进行反复调用,而不是对原始的ToArray进行调用。 我可以更改函数的名称 - MakeArray而不是ToArray,但我想保留我的命名约定。 也许你有任何解决方案吗?
答案 0 :(得分:9)
首先,我强烈建议你不这样做。你已经“保存”了一行(一个使用指令)并添加了四行不起作用。为什么单个使用指令对您如此痛苦?它不受其他代码的影响,几乎完全无害......当然还提供了LINQ的所有其他优点。
如果你真的必须这样做,你可以明确地调用LINQ版本:
public static T[] ToArray<T>(this IList<T> list)
{
return System.Linq.Enumerable.ToArray(list);
}
但只是不。