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

.net - 我可以用 WHERE 关键字限制这个 c# 扩展方法定义吗?

当您提供枚举时,我正在尝试执行以下扩展方法->将 int 转换为枚举:-

现在,我希望做到这一点,以便您只能将类型 T 定义为枚举。有什么我可以限制的吗?

例如。

0 投票
7 回答
1671 浏览

c# - C# 扩展方法 - 有多远?

Rails 为 Ruby 引入了一些核心扩展,例如3.days.from_now返回,正如您预计三天后的日期。使用 C# 中的扩展方法,我们现在可以做类似的事情:

或者怎么样:

这从根本上是错误的,还是有时它是一个好主意,例如在 Rails 之类的框架中?

0 投票
5 回答
5518 浏览

asp.net - 如何在数据绑定控件中使用 Eval 调用扩展方法

我对 int 类型有一个简单的扩展方法,因此我可以执行以下操作:

这在代码中效果很好,但我想在中继器模板中使用这个扩展方法。数据绑定时,我想做以下事情:

那没有用,所以我尝试了:

它仍然没有工作。JIT 编译器没有看到我的扩展方法,我在页面中有正确的导入语句。

我解决这个问题的唯一想法是用 Literal 控件替换 Eval 并在代码隐藏中调用扩展方法,但无论哪种方式,我仍然想知道为什么这不起作用。

谢谢

0 投票
2 回答
2218 浏览

c# - 在单独的程序集中使用受约束的通用扩展方法会产生参考错误

我创建了一个单独的程序集来包含常见的扩展方法,扩展方法使用来自System.Web.dll(和其他)的类。

然后,当我创建一个引用包含扩展方法的程序集的新项目(控制台应用程序)时,如果它不使用扩展程序集中任何类Utilities.dll的扩展方法,我不需要添加对新项目的引用(例如)。System.Web.dllSystem.Web.dllSystem.Web.UI.Control

当其中一种扩展方法成为通用方法时,一切都会按预期继续工作。但是,一旦我将约束添加到将其约束到程序集中的类的通用方法中,System.Web.dll编译器就会抱怨我的新项目(控制台应用程序)需要引用,System.Web.dll即使新项目仍然没有使用该程序集中的任何内容.

换句话说,只要我对我的泛型方法没有约束,一切都会编译,但只要我添加约束,编译器就会抱怨。

我的扩展方法 assemble 的一个示例(编译为库Utilities.dll):

And here is a new console application that won't compile (unless I also add a reference to System.Web.dll):


Update: As Marc pointed out (below) puting the offending method in a separate namespace fixes the problem.

But the question still remains why is the constraint a problem while the type Control was already used as a parameter to the method. and why is the namespace the solution when I already use the using顶部的指令。

0 投票
3 回答
1404 浏览

c#-3.0 - 返回数组片段

我需要从数组中获取数组片段。我厌倦了使用 Array.Copy()。new ArraySegment(..).Array 返回原始的 [full] 数组。下面是我想出来的,但我觉得它很蹩脚。有一个更好的方法吗?

提前致谢。

更新:以上只是一个例子。
我有一个方法:byte [] CalculateXXX(byte [] key, byte [] message); 我在这个方法中进行数组操作。我想返回数组的一部分。ArraySegment 不实现 IEnumerable 并且它不返回仅包含段的数组 new ArraySegment(arr...).Array 返回完整的原始数组。

var rval = new byte[4]; //new ArraySegment(finalOutputBuffer, 0, 4).SegmentedArray(); Array.Copy(finalOutputBuffer, 0, rval, 0, 4);

我发现我必须执行上述操作才能返回一个数组片段。只是想知道是否有更好的方法来返回数组的片段[作为新数组]。

0 投票
6 回答
265 浏览

c# - 根据某些标准从集合中选择最大项目

我是.net 3.5 的新手。我有一系列物品:

在哪里

我想获得名称长度最长的元素。我试过

但它当然会返回最大长度(我需要一个Model对象)。我知道有一种使用扩展方法的方法,但我不知道如何。

0 投票
13 回答
10003 浏览

.net - 什么是扩展方法?

.NET 中的扩展方法是什么?



编辑:我在扩展方法的使用上发布了一个后续问题

0 投票
10 回答
1380 浏览

.net - 扩展方法的使用

  • 什么时候使用扩展方法有意义?
  • 向类型添加扩展方法会影响性能吗?

    这些问题是我之前提出的关于Extension Methods的问题的后续问题。

  • 0 投票
    1 回答
    1827 浏览

    .net - 如何正确记录扩展方法

    因此,对于常用的东西,我有一些扩展方法,并且在记录它们时,我突然想到我不知道如何summary在 XML 注释中一致地编写标记。例如:

    对比

    所以,问题似乎是我不知道如何始终如一地引用那个讨厌的this参数。此外,我不知道如何清楚地表明这是一种扩展方法(因为我不确定 Sandcastle 和其他工具是否已经赶上它们并且可以自动注释文档以显示它);我不想以后不得不撕掉所有的手动文档。

    所以问题是,对于记录扩展方法有什么指导?如果没有正式的指导,你们都是怎么处理的?如果我们还没有,我们可以对某事进行投票,以便我有事可做吗?作为一个强迫性控制狂,这种不一致让我发疯。

    0 投票
    2 回答
    1108 浏览

    asp.net - MVC beta 中的 <%=Html.RadioButtonList()%> 扩展在哪里?

    核心 MVC 测试版中没有单选按钮列表助手有什么原因吗?有一个下拉列表,但没有单选按钮列表。

    我知道我可以很容易地创建一个扩展方法来确定这是一个核心的事情吗?