创建StackOverflow异常的扩展

时间:2011-02-15 08:12:35

标签: c# asp.net visual-studio visual-studio-2010

我为一个类写了一个函数扩展。此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,但我想保留我的命名约定。 也许你有任何解决方案吗?

1 个答案:

答案 0 :(得分:9)

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

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

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

只是不

相关问题