问题标签 [extension-methods]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
297 浏览

c# - 什么时候图书馆应该被称为“Linq-something”或“something-Linq”?

我只是查看了其中一个具有命名模式“something-Linq”的库,希望获得更多关于如何以优雅的方式构建表达式树的知识 - 并且感到失望。因为我能找到的只是扩展 IEnumerable 的方法——当然是使用“普通”C# 代码。

现在我有这个问题: IEnumerable 的非表达式扩展真的证明库的名称中有“Linq”吗?还是作者只是在大肆宣传,试图为他的 IEnumerable 扩展库获得更多下载,而当在库的名称中看到“Linq”时,我期待 IQueryable 和表达式是正确的?

编辑:

我认为 Linq-to-... 和 something-Linq 库之间存在差异。恕我直言 Linq-to-... 是 linq 提供程序库,something-Linq 是 linq 扩展。我认为 Linq 提供程序库可以选择是否在其结果中公开 IQueryable 或 IEnumerable - linq 扩展没有这种选择。就我而言,他们必须能够使用这两种提供程序库。这对我来说意味着所有 linq 扩展都必须提供 Queryable 和 Enumerable 扩展。

编辑2:

乔恩和我在他的回答评论中进行了非常热烈的讨论。我自愿创建了一篇博文,希望能澄清一些事情: 绘制 LINQ 的未知水域

编辑3:

对于任何对讨论感兴趣的人——我真的鼓励你去我的博客文章。跳过帖子本身,因为它很可怕 - 直接进入 Jon 的讨论和解释。

0 投票
1 回答
1550 浏览

c# - 使用例如 Linq-To-Xml 时处理空引用

是否有更好/更短的方法来处理(大量)空引用,例如当我使用 LinqToXML 时。

我为 XElement 编写了这个扩展,它可以很好地处理它,但也许还有另一种方法?

那么函数名呢?“和”并不是真正的描述性。

PS:我知道我可以在这个示例中使用 XPath,但在更复杂的情况下并非总是如此。

0 投票
10 回答
10873 浏览

c# - C# 扩展方法 - 也接受转义字符的字符串拆分

我想为 .NET String 类编写一个扩展方法。我希望它是 Split 方法的一个特殊变体——当在分隔符之前使用转义字符时,它采用转义字符来防止拆分字符串。

写这个的最好方法是什么?我很好奇处理它的最佳非正则表达式方法。
有签名的东西,比如...

更新: 因为它出现在一个评论中,转义......

在 C# 中转义非特殊字符时,您会收到错误 - CS1009:无法识别的转义序列。

在 IE JScript 中,转义字符被丢弃。除非你尝试 \u 然后你得到一个“预期的十六进制数字”错误。我测试了 Firefox,它具有相同的行为。

我希望这种方法非常宽容并遵循 JavaScript 模型。如果您在非分隔符上转义,则应该“友好地”删除转义字符。

0 投票
4 回答
6061 浏览

.net - 如何处理 System.Data.DataTableExtensions.CopyToDataTable() 中的缺陷

我遇到了一些可能是 Extension 方法中的缺陷.CopyToDataTable

此方法由 Importing(在 VB.NET 中)使用System.Data.DataTableExtensions,然后针对 IEnumerable 调用该方法。如果您想使用 LINQ 过滤数据表,然后在最后恢复数据表,您可以这样做。

IE:

在上面的示例中,“WHERE”过滤可能不返回任何结果。如果发生这种情况,CopyToDataTable 会抛出异常,因为没有 DataRows。

为什么?

正确的行为应该是返回 Rows.Count = 0 的 DataTable。

谁能想到一个干净的解决方法,这样调用 CopyToDataTable 的人就不必知道这个问题?

System.Data.DataTableExtensions 是一个静态类,因此我无法覆盖该行为。有任何想法吗?我错过了什么吗?

更新:

我已将此作为问题提交给Connect。我仍然想要一些建议,但如果你同意我的观点,你可以通过上面的链接在 Connect 上投票赞成这个问题

干杯

0 投票
4 回答
1783 浏览

c# - 引用自定义 C# 扩展方法的编译器错误

我第一次尝试创建扩展方法,但遇到了一些麻烦……也许你们可以帮忙:)

然后当我执行“MyClass.myMethod”时,我得到 q 编译器错误,说该方法不存在......

这是为什么?

0 投票
4 回答
1058 浏览

c# - C# 扩展方法架构问题

我最近问了这个问题: 引用自定义 C# 扩展方法的编译器错误

Marc Gravell 的回答很完美,它解决了我的问题。但它给了我一些思考...

如果扩展方法必须放在静态类上,并且方法本身必须是静态的,为什么我们不能创建静态扩展方法?

我知道标记为“this”的参数将用于允许访问我们正在扩展的对象的实例。我不明白的是为什么不能将方法创建为静态的……在我看来,这是一个毫无意义的限制……

我的问题是:为什么我们不能创建一个可以作为静态方法工作的扩展方法?

0 投票
5 回答
7661 浏览

c# - 更快的方式来做一个列表.包含()

我正在尝试做我认为是“反相交”的事情(我不确定正确的名称是什么,但这就是 EpicGames 的 Tim Sweeney 在旧的 UnrealEd 中所说的)

稍后,我做另一件事,从原始结果中减去结果,以查看我删除了哪些元素。使用 .Except() 非常快,所以没有问题。

必须有一种更快的方法来做到这一点,因为在任一列表中都有约 30,000 个元素(字符串)时,这种方法的性能非常糟糕。优选地,一种执行此步骤的方法以及稍后的一举一动会很好。我尝试使用 .Exists() 而不是 .Contains(),但速度稍慢。我觉得有点厚,但我认为 .Except() 和 .Intersect() 和/或 .Union() 的某种组合应该是可能的。

0 投票
10 回答
7659 浏览

c# - String.IsNullOrBlank 扩展方法

我不断检查字符串字段以检查它们是否为空或空白。

为了节省自己的打字时间,是否可以为 String 类创建一个具有相同效果的扩展方法?我了解如何为类实例添加扩展方法,但是向类添加静态扩展方法呢?

0 投票
11 回答
3171 浏览

.net - 随着扩展方法的出现,抽象类的吸引力是否降低了?

.NET 中扩展方法的一个有趣方面是您可以将它们应用于接口。对我来说,我可以在接口附近定义功能而不定义使程序集混乱的抽象类似乎很好。

我知道抽象类并没有过时或任何东西,但是您对在代码中使用这种副作用有何感想?

例子:

0 投票
2 回答
3897 浏览

asp.net-mvc - 在 HtmlHelper 扩展方法中访问 HtmlHelper 方法 - ASP.NET MVC RC2

我正在尝试在 ASP.NET MVC RC2 中构建 HtmlHelper 扩展。此代码在 Preview 5 中运行良好,但在 RC2 中不再运行,我试图了解原因。这是代码:

问题是我无法从扩展方法中访问 htmlHelper 上的所有方法。因此,找不到 htmlHelper.DropDownList。

有什么建议么?