可枚举的 LINQ 扩展隐藏在字符串中......为啥以及如何? [复制]

Posted

技术标签:

【中文标题】可枚举的 LINQ 扩展隐藏在字符串中......为啥以及如何? [复制]【英文标题】:Enumerable LINQ extensions are hidden on strings... why and how? [duplicate]可枚举的 LINQ 扩展隐藏在字符串中......为什么以及如何? [复制] 【发布时间】:2011-03-11 14:22:59 【问题描述】:

可能重复:Why doesn’t VS 2008 display extension methods in Intellisense for String class

大家好。

昨天我注意到Enumerable LINQ 扩展隐藏在字符串上(我的意思是对智能感知隐藏)。

我们都知道字符串是一个IEnumerable<char>,所以它应该自动获得 Enumerable 扩展,并且如果你使用它们实际上可以编译和工作,但是为什么 .NET 开发人员决定对智能感知隐藏它们呢?

最后,我们如何隐藏特定类型的扩展方法?

附: 对不起我的英语不好......

编辑: 我忘了说我的目标是 VS 2008 上的 .net 3.5

编辑2: 这里有 2 张图片说明发生了什么:

字符串智能感知:

Intellisense on string http://img690.imageshack.us/img690/10/stringintelli.png

IEnumerable 上的智能感知:

【问题讨论】:

您是否将 System.Core 作为程序集引用? 我不知道它为什么被隐藏,但我可以验证扩展方法在 VS 2008 中对字符串是隐藏的,但在 VS 2010 中没有。 另见此 Usenet 线程抓取:eggheadcafe.com/software/aspnet/32196968/…(其中一些熟悉的名字......) 另请注意,使用 VS2008 和 ReSharper 5,您确实会显示它们。 @AakashM:谢谢你的澄清 【参考方案1】:

不在我的 Visual Studio 副本上(那是 2010 年,安装了 ReSharper):

alt text http://codeka.com/tmp/string-enumerable.png

也许您忘记了顶部的using System.Linq;?或者也许 ReSharper 正在添加它们,不确定...

【讨论】:

我编辑了我的问题。我正在使用 VS2008,顶部有“使用 System.Linq”。【参考方案2】:

当我有一个字符串 s 并输入 s. 时,我会得到所有的扩展方法(如 FirstOrDefault 等)。

我使用 VS2010 Express 进行了检查。

您当然应该在范围内拥有static class System.Linq.Enumerable


至于 How 部分,我猜想在 String 上使用了类似 this attribute 的东西。但是清除 C# 的“隐藏高级”选项并没有带来任何变化,所以它不完全是这个属性,而是类似的东西。

至于为什么部分,不知道。但有趣的是它已针对 Fx4 进行了更改

【讨论】:

对不起,我编辑了我的问题,我正在使用 VS2008 好的,已验证。在 VS2008 中,方法出现在智能感知中。 哦,好吧,不只是我 :) 。有什么想法吗?

以上是关于可枚举的 LINQ 扩展隐藏在字符串中......为啥以及如何? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

LINQ 在使用 .Where() 循环和修改可枚举过滤器中的项目后,项目消失了 - 为啥? [复制]

可以在不删除“使用”的情况下从 Intellisense 隐藏 Linq 和其他扩展吗?

csharp 将集合转换为可枚举为linq

LINQ学习——Group

针对 SQL 后端的 LINQ 的可扩展包含方法

现有的类似于 Parallel.For 的 LINQ 扩展方法? [复制]