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

c# - 我可以将扩展方法添加到现有的静态类吗?

我是 C# 中扩展方法的粉丝,但在将扩展方法添加到静态类(例如Console.

例如,如果我想添加一个扩展Console名为 ' WriteBlueLine',这样我就可以去:

我通过添加一个本地的、公共的静态方法来尝试这个,Console作为一个' this'参数......但没有骰子!

这没有添加一个 ' WriteBlueLine' 方法来Console......我做错了吗?还是要求不可能的事?

0 投票
9 回答
34269 浏览

c# - 是否可以在 C# 中实现 mixins?

我听说可以使用扩展方法,但我自己不太清楚。如果可能的话,我想看一个具体的例子。

谢谢!

0 投票
4 回答
9680 浏览

c# - C#4 中的 dynamic 关键字是否支持扩展方法?

我正在听一个关于C#4关键字的演讲dynamic,我想知道......这个功能是否会与其他 .NET 功能正交,例如它是否支持扩展方法?


注意:这个问题是在 C#4 发布之前提出的,这就是为什么它用将来时来表达。

0 投票
150 回答
131087 浏览

c# - 你最喜欢的 C# 扩展方法是什么?(codeplex.com/extensionoverflow)

让我们列出您在其中发布您出色和最喜欢的扩展方法的答案。

要求是必须发布完整的代码以及如何使用它的示例和说明。

基于对这个主题的高度兴趣,我在Codeplex上设置了一个名为 extensionoverflow 的开源项目。

请将您的答案标记为接受,以便将代码放入 Codeplex 项目中。

请发布完整的源代码,而不是链接。

Codeplex 新闻:

24.08.2010 Codeplex 页面现在在这里: http ://extensionoverflow.codeplex.com/

11.11.2008 XmlSerialize/XmlDeserialize现在已实现并经过单元测试

11.11.2008 仍有更多开发者的空间。;-)现在加入!

11.11.2008 第三个贡献者加入ExtensionOverflow,欢迎来到BKristensen

11.11.2008 FormatWith现在已实现并经过单元测试

09.11.2008 第二个贡献者加入ExtensionOverflow。欢迎来到chakrit

09.11.2008 我们需要更多的开发人员。;-)

09.11.2008 ThrowIfArgumentIsNull现已在 Codeplex 上实施单元测试。

0 投票
1 回答
240 浏览

c# - 如何在 C# 中的类上创建扩展方法?

我想为字符串编写一个扩展方法,它在 System.String 上显示为静态方法 - 我还没有设法完成。

那可能吗?如果有怎么办?谢谢!

0 投票
7 回答
48822 浏览

.net - 枚举扩展方法

在 vs2008 中,是否可以编写适用于任何枚举的扩展方法。

我知道您可以针对特定枚举编写扩展方法,但我希望能够使用单个扩展方法来处理每个枚举。这可能吗?

0 投票
3 回答
44053 浏览

c# - 为 IEnumerable 定义扩展方法返回 IEnumerable?

如何定义IEnumerable<T>返回的扩展方法IEnumerable<T>?目标是使扩展方法对所有人可用,并且IEnumerable可以是匿名类型。IEnumerable<T>T

0 投票
7 回答
33927 浏览

c# - 扩展方法语法与查询语法

我正在尝试了解是否有时间使用标准 linq 关键字或带有 lambda 表达式的 linq 扩展方法。他们似乎做同样的事情,只是写法不同。纯粹是风格问题吗?

它们与第二个示例非常相似,更简洁一些,但如果您不知道 => 正在做什么,则表达能力可能会降低。

除了编写简洁的代码之外,与 LINQ 语法相比,使用扩展方法还有其他优点吗?

0 投票
4 回答
1605 浏览

architecture - 扩展方法的使用——这不是糟糕的设计吗?

我刚刚开始研究 .NET 3.5,所以如果之前有人问过这类问题,请原谅我。我正在为扩展方法的体面使用而苦苦挣扎,因为我刚刚下载了 suteki shop 一个 MVC 电子商务产品。在这个项目中,有一个非常标准的存储库模式,它扩展了 IRepository。

为了扩展此接口公开的基本功能,使用了扩展方法,即:

现在这一切都很好,但是就我而言,接口充当实现它们的对象的契约。

存储库已被接口的事实表明尝试采用与数据层无关的方法。也就是说,如果我要创建自己的数据层,我会很困惑我必须创建哪些扩展方法来确保我已经满足了对实现我的存储库类的类的合同要求。

似乎创建 IRepository 然后扩展的旧方法可以更好地了解所需内容,例如

所以我想我的问题是这种使用扩展方法对其他人来说似乎是错误的吗?如果不是,为什么?我不应该为此抱怨吗?

编辑:

上面的例子似乎是一个很好的例子,说明了为什么扩展方法非常有用。

我想我的问题是数据访问特定实现是否卡在数据访问机制程序集中的扩展方法中。

这样,如果我要将它换成另一种机制,我将不得不在该程序集中创建一个类似的扩展方法。

0 投票
1 回答
561 浏览

c# - VS2008 和 IIS6 之间的 C# 强制转换不同

我有一段 C# 代码将枚举的值按类型添加到下拉列表中。它要求调用它时 T1 是枚举类型,尽管我不能将其指定为类型约束,因为枚举是不可能的特殊情况。这不是主要问题,因为这仅在内部使用并记录在案。

Description 是 System.Enum 的扩展,它返回枚举值的 DescriptionAttribute 的值,如果未指定,则返回值的 ToString。

因此,我必须在 LINQ 语句的 Cast 部分转换为 System.Enum,而不是转换为 T1,否则 Description 扩展不可用。

这很好,在 Visual Studio 2008 的 Web 开发服务器中工作,但在 IIS 6 上运行时失败并出现强制转换异常。它使用不变的硬编码枚举作为填充 ASP 页面的类型参数运行。

System.InvalidCastException:从 '%namespace.class+nameofenum%' 到 'System.Enum' 的无效转换。在 System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.Linq.Enumerable.d__b0 1.MoveNext() at System.Linq.Enumerable.<SelectIterator>d__d2.MoveNext() 在 System.Linq。 Buffer 1..ctor(IEnumerable1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at AddEnum[T1](DropDownList me)

(命名空间/类名被我掩盖了)

我无法在其他版本的 IIS 上对其进行测试,但开发版本与生产系统不匹配似乎很奇怪。有人知道为什么是这样吗?