问题标签 [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.
.net - 定义具有解决方案范围的 .NET 扩展方法
我有一些我现在经常使用的“帮助”风格的扩展方法(它们大多非常简单、直观,并且为善而不是邪恶工作,所以请不要让这陷入关于我是否应该使用它们的讨论)。它们在很大程度上扩展了核心 .NET CLR 类。
目前,我必须将包含我的扩展方法的“ExtensionMethods.cs”文件复制到解决方案中的每个新项目,以便能够在多个项目中使用它们。
是否可以定义一个扩展来处理解决方案中的多个项目,或者将它们包装在一个“扩展”dll中,或者它们是否仅限于项目范围?
编辑虽然“专用项目”的答案是完全有效的,但我选择了 marxidad,因为我更喜欢他给出的方法。感谢到目前为止的所有答案,我已经全部升级了,因为它们都是很好的答案
c# - 使用 C# 扩展方法的运算符重载
我正在尝试使用扩展方法向 C#StringBuilder
类添加运算符重载。具体来说,给定StringBuilder
sb
,我想sb += "text"
等效于sb.Append("text")
。
下面是创建扩展方法的语法StringBuilder
:
它成功地将blah
扩展方法添加到StringBuilder
.
不幸的是,运算符重载似乎不起作用:
除其他问题外,this
此上下文中不允许使用关键字。
是否可以通过扩展方法添加运算符重载?如果是这样,正确的方法是什么?
c# - 在 C# 中使用扩展方法时出错
我遇到了一个问题,让我认为 3.0 框架中存在错误。当我尝试使用扩展方法时,出现以下错误:
使用此简单代码时:
消除此编译错误的唯一方法是添加以下代码:
自从我使用扩展方法以来已经有几个月了,但我很确定我不必这样做。有没有其他人遇到过这个问题?
c# - 如何在 VB 代码中调用 C# 扩展方法
我有一个类库,其中包含一些用 C# 编写的扩展方法和一个用 VB 编写的旧网站。
我想从 VB 代码中调用我的扩展方法,但它们没有出现在 intelisense 中,并且当我访问该站点时出现编译错误。
我已经获得了所有必需的Import,因为相同命名空间中包含的其他类在 Intelisense 中看起来很好。
有什么建议么
编辑:更多信息以帮助发表一些评论。
我的实现看起来像这样
和我这样的用法
extension-methods - Container.DataItem 中的扩展方法输出?
所以我有一个 IList 业务实体,我在 ListView 中循环到一个无序列表中。我在表示层的这个实体上创建了一个扩展方法。在后面的代码中,我可以 Response.Write 这个扩展方法的结果,但是当我尝试通过 ListView 访问它时出现错误。该方法称为 IsCurrent 并返回一个布尔值......这是我的代码:
我得到的错误是:“CB.CMSFramework.WebPage”不包含“IsCurrent”的定义,并且找不到接受“CB.CMSFramework.WebPage”类型的第一个参数的扩展方法“IsCurrent”(您是否缺少使用指令还是程序集引用?)
但是......当我从后面的代码中执行这种类型的代码时,我没有收到任何错误:
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);
任何想法这里可能出了什么问题?
c# - C# 扩展
我通常非常谨慎地使用扩展方法。当我确实觉得有必要编写扩展方法时,有时我想重载该方法。我的问题是,您对调用其他扩展方法的扩展方法有何看法?不好的做法?感觉不对,但我无法真正定义原因。
例如,第二个 CaselessIs 方法调用第一个:
不这样做会更合适吗?缺点是它违反了 DRY。
c# - 使用扩展方法引发 C# 事件 - 这很糟糕吗?
我们都熟悉 C# 事件声明的可怕之处。为了确保线程安全,标准是这样写:
最近在这个板上的其他一些问题(我现在找不到)中,有人指出在这种情况下可以很好地使用扩展方法。这是一种方法:
有了这些扩展方法,您只需要声明和引发事件就是这样:
我的问题:这是个好主意吗?我们是否因为没有标准的 On 方法而遗漏了什么?(我注意到的一件事是它不适用于具有显式添加/删除代码的事件。)
c# - 在“空”引用(即没有订阅者的事件)上调用扩展方法是邪恶的吗?
恶还是不恶?
请注意,由于扩展方法的性质,如果 MyButtonClicked 为 null,MyButtonClicked.Raise 将不会抛出 NullReferenceException。(例如,没有 MyButtonClicked 事件的侦听器)。
恶不恶?
c# - 你能在类型数组上写扩展方法吗?
我需要在 byte[] 上写一个扩展方法。那可能吗?