问题标签 [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 投票
3 回答
425 浏览

c# - 有没有办法让“破坏性”字符串方法 a-la Ruby?

在 Ruby 中,改变对象的方法最后会有一个爆炸:string.downcase!

在 c# 中,你必须这样做:foo = foo.ToLower()

有没有办法制作一个扩展方法,如:

foo.ConvertToLower()

那会操纵foo吗?

(我认为答案是否定的,因为字符串是不可变的,你不能ref this在扩展方法中做 a。)

0 投票
1 回答
2665 浏览

powershell - 有没有更简单的方法在 Powershell v2 中使用扩展方法

背景

这篇文章解释了如何在 Powershell 中使用扩展方法

http://community.bartdesmet.net/blogs/bart/archive/2007/09/06/extension-methods-in-windows-powershell.aspx

将此与某人在 C# 中所做的比较 - 他们添加了“使用 SomeAssembly”并加载了所有扩展方法。

我的问题

这是否变得更简单 Powershell 2.0. 如果是这样,如何在 Powershell 2.0 中使用扩展方法?我检查了公开可用的文档并安装了 CTP,但没有看到任何有用的东西。

0 投票
3 回答
3126 浏览

ruby - 在运行时获取/设置 Ruby 方法元数据的最佳策略是什么?

我有一堂有一些方法的课。这是超级秘密,但我已经在这里复制了我能做到的。

我希望能够在运行时向类询问其中一种方法并接收哈希或结构,如下所示:

这样做的最佳方法是什么?显然,您可以将单独的 YAML 文件放在旁边并设置一个约定来将两者联系起来,但理想情况下,我希望将代码和元数据放在一个地方。

我能想到的最有前途的想法是这样的:

有人有更好的想法吗?我在吠叫一棵非常错误的树吗?

0 投票
10 回答
59524 浏览

c# - 解决扩展方法/LINQ 歧义

我正在为ReSharper 4 编写一个加载项。为此,我需要引用几个 ReSharper 的程序集。其中一个程序集 (JetBrains.Platform.ReSharper.Util.dll) 包含一个System.Linq命名空间,其中包含 System.Core 已提供的扩展方法子集。

例如,当我编辑代码时,它会在这些扩展之间产生歧义,因此我无法使用OrderBy. 我怎么能解决这个问题?我想使用核心LINQ扩展,而不是来自 ReSharper 的扩展。

尝试编译时出现以下错误:

以下方法或属性之间的调用不明确:' System.Linq.Enumerable.OrderBy<string,int>(System.Collections.Generic.IEnumerable<string>, System.Func<string,int>)' and 'System.Linq.Enumerable.OrderBy<string,int>(System.Collections.Generic.IEnumerable<string>, System.Func<string,int>)'

编辑:我尝试了下面的建议,不幸的是没有运气。同时,我通过删除对System.Core. 这样我就可以使用 ReSharper DLL 文件提供的扩展。

上传了一个示例程序,我刚刚导入了我需要的 ReSharper DLL 文件。我更改了System.Coreto的别名SystemCore,添加了extern alias指令,但它仍然不起作用。如果我错过了什么,请告诉我。PS 引用的是安装在默认目录中的 ReSharper v4.1 DLL 文件"C:\Program Files\JetBrains\ReSharper\v4.1\..."

0 投票
6 回答
7362 浏览

.net - 来自扩展方法的 ArgumentNullException 或 NullReferenceException?

当在空实例上调用扩展方法时(扩展方法不允许),您认为最好的异常类型是什么?由于扩展方法只不过是静态方法,您可以争辩说它应该是 ArgumentNullException,但另一方面,它们像实例方法一样使用,因此使用 NullReferenceException 可能更自然。让我们看下面的例子:

这样,如果 value 参数为 null,则会抛出 NullReferenceException。

另一个例子是:

编辑: 在您指出的一些答案中,可以像静态方法一样调用扩展方法,在这种情况下,空引用异常是错误的,这是一个很好的观点,实际上是我的担忧之一,不知道为什么我忘了首先在问题中提到这一点。

也有人指出,抛出 NullReferenceException 是错误的,没错,就是这样。这就是我不扔它的原因,我只是让它发生(让 CLR 扔它),而不是保护方法。

我认为我赞成 ArgumentNullException (这是我迄今为止使用的),但我仍然认为至少有反对 NullReferenceException 的空间,因为它在大多数将要使用该方法的地方看起来更自然。

0 投票
1 回答
980 浏览

asp.net-mvc - MVC 助手扩展

为什么我会收到错误“Expected class, interface, enum or struct”,字符串下划线?

0 投票
1 回答
514 浏览

c# - 扩展方法作为重命名属性的一种方式

有些类有丑陋的字段称为 URL,但我宁愿称它为文件。

有没有办法不使用 setFile,而是让文件像属性一样?

0 投票
4 回答
11132 浏览

.net - 官方 LINQ 扩展方法

.NET 3.5 将大量扩展方法添加到代码的核心库中。我注意到在 MSDN 中,IEnumerable<> 等有一个关于已添加的扩展方法的部分。

是否有所有已添加以供参考的扩展方法的列表?

编辑 感谢您的回答,但我正在寻找一个完整的列表,而不仅仅是每个独立类型的 MSDN 文章的链接,我正在寻找一个完整的列表。

0 投票
1 回答
3770 浏览

c# - 您如何扩展(或可以扩展)静态数学方法?

在 C# 3.0 中,我知道您可以使用“this”命名法来扩展方法。

我正在尝试扩展 Math.Cos(double radians) 以包含我的新课程。我知道我可以在我现有的课程中创建一个“Cos”方法,但我只是想看看如何/是否可以为了练习而做到这一点。

在尝试了一些新事物之后,我将返回 SO 以获取输入。我被困住了。

这就是我目前所拥有的......

0 投票
30 回答
45664 浏览

c# - 您发现了扩展方法的哪些优点?

一个 C# 的“非信徒”问我扩展方法的目的是什么。我解释说,然后您可以向已定义的对象添加新方法,尤其是当您不拥有/控制原始对象的源时。

他提出“为什么不给你自己的类添加一个方法?” 我们一直在兜兜转转(以一种好的方式)。我的一般反应是它是工具带中的另一个工具,他的回答是这是对工具的无用浪费......但我认为我会得到一个更“开明”的答案。

在哪些情况下您使用了无法(或不应该)使用添加到您自己的类中的方法的扩展方法?