问题标签 [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 回答
1348 浏览

.net - 定义具有解决方案范围的 .NET 扩展方法

我有一些我现在经常使用的“帮助”风格的扩展方法(它们大多非常简单、直观,并且为善而不是邪恶工作,所以请不要让这陷入关于我是否应该使用它们的讨论)。它们在很大程度上扩展了核心 .NET CLR 类。

目前,我必须将包含我的扩展方法的“ExtensionMethods.cs”文件复制到解决方案中的每个新项目,以便能够在多个项目中使用它们。

是否可以定义一个扩展来处理解决方案中的多个项目,或者将它们包装在一个“扩展”dll中,或者它们是否仅限于项目范围?

编辑虽然“专用项目”的答案是完全有效的,但我选择了 marxidad,因为我更喜欢他给出的方法。感谢到目前为止的所有答案,我已经全部升级了,因为它们都是很好的答案

0 投票
6 回答
54100 浏览

c# - 使用 C# 扩展方法的运算符重载

我正在尝试使用扩展方法向 C#StringBuilder类添加运算符重载。具体来说,给定StringBuilder sb,我想sb += "text"等效于sb.Append("text")

下面是创建扩展方法的语法StringBuilder

它成功地将blah扩展方法添加到StringBuilder.

不幸的是,运算符重载似乎不起作用:

除其他问题外,this此上下文中不允许使用关键字。

是否可以通过扩展方法添加运算符重载?如果是这样,正确的方法是什么?

0 投票
16 回答
48896 浏览

c# - 在 C# 中使用扩展方法时出错

我遇到了一个问题,让我认为 3.0 框架中存在错误。当我尝试使用扩展方法时,出现以下错误:

使用此简单代码时:

消除此编译错误的唯一方法是添加以下代码:

自从我使用扩展方法以来已经有几个月了,但我很确定我不必这样做。有没有其他人遇到过这个问题?

0 投票
10 回答
13663 浏览

c# - 如何在 VB 代码中调用 C# 扩展方法

我有一个类库,其中包含一些用 C# 编写的扩展方法和一个用 VB 编写的旧网站。

我想从 VB 代码中调用我的扩展方法,但它们没有出现在 intelisense 中,并且当我访问该站点时出现编译错误。

我已经获得了所有必需的Import,因为相同命名空间中包含的其他类在 Intelisense 中看起来很好。

有什么建议么

编辑:更多信息以帮助发表一些评论。

我的实现看起来像这样

和我这样的用法

0 投票
1 回答
503 浏览

extension-methods - Container.DataItem 中的扩展方法输出?

所以我有一个 IList 业务实体,我在 ListView 中循环到一个无序列表中。我在表示层的这个实体上创建了一个扩展方法。在后面的代码中,我可以 Response.Write 这个扩展方法的结果,但是当我尝试通过 ListView 访问它时出现错误。该方法称为 IsCurrent 并返回一个布尔值......这是我的代码:

我得到的错误是:“CB.CMSFramework.WebPage”不包含“IsCurrent”的定义,并且找不到接受“CB.CMSFramework.WebPage”类型的第一个参数的扩展方法“IsCurrent”(您是否缺少使用指令还是程序集引用?)

但是......当我从后面的代码中执行这种类型的代码时,我没有收到任何错误:

0 投票
5 回答
8561 浏览

asp.net-mvc - 为什么我的 HtmlHelper 扩展不起作用?

我正在构建一个 ASP.Net MVC 网站。我决定将 Web、模型和控制器分离到同一个解决方案中的不同项目中,这些项目相互引用,而不是在一个项目中包含所有内容。

引用是这样的:

Web ---[references]---> Controller ---[references]---> Model

现在我想向 HtmlHelper 类添加 2 个自定义方法——它们被称为“IncludeScript”和“IncludeStyle”。它们每个都接受一个字符串参数,并分别生成一个脚本或链接标签。

根据网络上的文档,我创建了一个扩展器类,并编写了这两个方法并编译了应用程序。

现在,当我进入 Public.Master 页面(这是我的主要母版页,也是我打算使用这些方法的地方之一)时,我可以输入如下代码:

<%= Html.IncludeScript("\js\jquery.js") %>

IntelliSense 采用 IncludeScript 方法并向我显示语法就好了。所以我希望一切都能正常工作。

但事实并非如此。

一切都可以编译,但只要我运行应用程序,就会从 Default.aspx.cs 的第 14 行收到以下运行时错误:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

这是发生错误的代码行:

httpHandler.ProcessRequest(HttpContext.Current);

任何想法这里可能出了什么问题?

0 投票
5 回答
900 浏览

c# - C# 扩展

我通常非常谨慎地使用扩展方法。当我确实觉得有必要编写扩展方法时,有时我想重载该方法。我的问题是,您对调用其他扩展方法的扩展方法有何看法?不好的做法?感觉不对,但我无法真正定义原因。

例如,第二个 CaselessIs 方法调用第一个:

不这样做会更合适吗?缺点是它违反了 DRY。

0 投票
6 回答
17204 浏览

c# - 使用扩展方法引发 C# 事件 - 这很糟糕吗?

我们都熟悉 C# 事件声明的可怕之处。为了确保线程安全,标准是这样写

最近在这个板上的其他一些问题(我现在找不到)中,有人指出在这种情况下可以很好地使用扩展方法。这是一种方法:

有了这些扩展方法,您只需要声明和引发事件就是这样:

我的问题:这是个好主意吗?我们是否因为没有标准的 On 方法而遗漏了什么?(我注意到的一件事是它不适用于具有显式添加/删除代码的事件。)

0 投票
8 回答
3194 浏览

c# - 在“空”引用(即没有订阅者的事件)上调用扩展方法是邪恶的吗?

恶还是不恶?

请注意,由于扩展方法的性质,如果 MyButtonClicked 为 null,MyButtonClicked.Raise 将不会抛出 NullReferenceException。(例如,没有 MyButtonClicked 事件的侦听器)。

恶不恶?

0 投票
2 回答
197 浏览

c# - 你能在类型数组上写扩展方法吗?

我需要在 byte[] 上写一个扩展方法。那可能吗?