【发布时间】:2011-02-15 08:12:35
【问题描述】:
我为一个类写了一个函数扩展。此扩展函数返回 IList 作为结果。 大多数时候,我想将 IList 转换为数组 T[]。 这需要我声明“使用 System.Linq;”在每个将 IList 转换为 T[] 的类中。 因此,为了为我保存“使用 System.Linq;”的声明;我在原始扩展的同一类中编写了一个扩展(因此我不必声明“使用”):
public static T[] ToArray<T>(this IList<T> list)
{
return list.ToArray();
}
当然,扩展类有“使用 System.Linq;”,但这是我需要放置此声明的唯一地方。 问题是我得到了 StackOverflow 异常,因为命令“list.ToArray();”实际上是递归调用自身而不是原始 ToArray。 我可以更改函数的名称 - MakeArray 而不是 ToArray,但我想保留我的命名约定。 或许你有什么解决办法?
【问题讨论】:
-
认真的吗?您正在经历所有这些额外的工作来避免将
using System.Linq;添加到几个源文件的顶部?这只是坚果。如果你以正确的方式做事,你的问题就会消失,而不是一些荒谬的黑客行为。在你写这个问题的时间里,你可以将using声明复制并粘贴到你的所有源文件中。 -
但现在你肯定需要在“My.Static.Extensions”中添加引用和使用子句——这不是零和游戏吗?
-
@nonnb:我想关键是他的所有其他源代码都在同一个命名空间中。但是,是的,这是一个非常愚蠢的立场,IMO。
标签: c# asp.net visual-studio visual-studio-2010