创建StackOverflow异常的扩展

Nao*_*aor 1 c# asp.net visual-studio-2010 visual-studio

我为一个类写了一个函数扩展.此extenssion函数返回IList作为结果.大多数时候我想将IList转换为数组T [].这需要我声明"使用System.Linq;" 在每个将IList转换为T []的类中.所以为了保存"使用System.Linq;"的声明.我在原始版本的同一类中写了一个扩展名(所以我不必声明"使用"):

    public static T[] ToArray<T>(this IList<T> list)
    {
        return list.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

当然,extenssion类有"使用System.Linq;",但这是我需要放置此声明的唯一地方.问题是我从命令"list.ToArray();"得到StackOverflow异常 实际上是对自己进行反复调用,而不是对原始的ToArray进行调用.我可以更改函数的名称 - MakeArray而不是ToArray,但我想保留我的命名约定.也许你有任何解决方案吗?

Jon*_*eet 9

首先,我强烈建议你要这样做.你已经"保存"了一行(一个使用指令)并添加了四行不起作用.为什么单个使用指令对您如此痛苦?它不受其他代码的影响,几乎完全是无害的......当然,除了为您提供LINQ的所有其他好处之外.

如果你真的必须这样做,你可以明确地调用LINQ版本:

public static T[] ToArray<T>(this IList<T> list)
{
    return System.Linq.Enumerable.ToArray(list);
}
Run Code Online (Sandbox Code Playgroud)

就是不要.