Tag: extension methods

IEnumerable null合并扩展

在经过foreach或LINQ查询迭代之前,我经常面临检查IEnumerable是否为null的问题,然后我经常会遇到这样的代码: var myProjection = (myList ?? Enumerable.Empty()).Select(x => x.Foo)… 因此,我想将此扩展方法添加到Extensions类: public static class MyExtensions { public static IEnumerable AsEmptyIfNull(this IEnumerable source) { return source ?? Enumerable.Empty(); } } 在我看来这个代码时会立即出现一个小问题,即,考虑到扩展方法的“实例方法方面” ,它应该仅仅作为一个静态方法来实现,否则这样的东西是完全合法的: IEnumerable list = null; list.AsEmptyIfNull(); 你看到使用它有任何其他缺点吗? 如果大量使用,这种扩展会导致开发人员出现某种不良趋势吗? 奖金问题: 你能建议一个更好的名字吗? 🙂 (英语不是我的第一语言,那么我在命名方面不太好…) 提前致谢。

结构上的扩展方法

你能为结构添加扩展方法吗?

如何使用EntityFramework.BulkInsert?

我正在尝试使用位于http://efbulkinsert.codeplex.com/的 EntityFramework.BulkInsert。 它是Entity Framework的扩展。 我安装了正确的NuGet包,并using EntityFramework.BulkInsert添加到我的class级顶部。 当我去做一个context.BulkInsert(entities) “BulkInsert”下面有一条红线,好像它不存在一样。 有人可以帮我正确使用这个扩展吗? 我之前没有使用过扩展方法。 你应该能够做到这一点: context.BulkInsert(entities);

是否有必要从扩展方法中抛出NullReferenceException?

如果我定义一个扩展方法,如下所示: static public String ToTitleCase(this string instance, CultureInfo culture) { if (instance == null) throw new NullReferenceException(); if (culture == null) throw new ArgumentNullException(“culture”); return culture.TextInfo.ToTitleCase(instance); } 我是否有必要检查字符串实例是否为null并自己抛出空引用exception? 或者CLR在这种情况下是否像实例方法一样处理扩展方法并为我处理检查/抛出? 我知道扩展方法只是静态方法的语法糖,也许C#编译器在编译时添加了检查? 请澄清 :)

我可以为两个我不直接控制的类添加隐式转换吗?

我希望能够在两个不相容的类之间隐式转换。 其中一个类是Microsoft.Xna.Framework.Vector3 ,另一个类只是F#项目中使用的Vector类。 我正在使用XNA在C#中编写一个3D游戏,并且 – 虽然它是用3D绘制的,但游戏只在两个维度上进行(它是一个鸟瞰图)。 F#类使用2D矢量处理物理: type Vector SuperUnit> = | Cartesian of ‘t * ‘t | Polar of ‘t * float member this.magnitude = match this with | Cartesian(x, y) -> x.newValue(sqrt (x.units ** 2.0 + y.units ** 2.0)) | Polar(m, _) -> m.newValue(m.units) member this.direction = match this with | Cartesian(x, y) […]

List AddToFront(T对象)的扩展方法如何?

我想为List类编写一个扩展方法,它接受一个对象并将其添加到前面而不是后面。 扩展方法真让我迷惑。 有人可以帮我解决这个问题吗? myList.AddToFront(T object);

覆盖List 的ToString()

我有一个类MyClass,我想覆盖List实例的方法ToString(): class MyClass { public string Property1 { get; set; } public int Property2 { get; set; } /* … */ public override string ToString() { return Property1.ToString() + “-” + Property2.ToString(); } } 我想要以下内容: var list = new List { new MyClass { Property1 = “A”, Property2 = 1 }, new MyClass { Property1 […]

错误:必须在顶级静态类中定义扩展方法(CS1109)

我正在尝试制作一个倒计时程序,我可以开始和停止,并在需要时将倒计时的值设置为10分钟。 但我收到的错误我不太明白。 我不是那样的C#,所以这里是代码: 有人可以帮我一点吗? 想想我在框架3.0上运行什么? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Timers; namespace PauseMaster { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { } private DateTime endTime; private void btnStartStop_Click(object sender, EventArgs e) […]

获取属性名称的扩展方法

我有一个扩展方法来获取属性名称 public static string Name(this Expression<Func> expression) { MemberExpression body = (MemberExpression)expression.Body; return body.Member.Name; } 我称之为 string Name = ((Expression<Func>)(() => this.PublishDateTime)).Name(); 这工作正常,并将PublishDateTime作为字符串返回给我。 但是我对调用语句有一个问题,它看起来太复杂了,我想要这样的东西。 this.PublishDateTime.Name() 有人可以修改我的扩展方法吗?

如何调用与现有方法同名的扩展方法?

可能重复: 在C#中是否有任何方法可以使用扩展方法覆盖类方法? 我的代码就像 public class TestA { public string ColA { get; set; } public string ColB { get; set; } public string ColC { get; set; } public void MethodA() { MessageBox.Show(“Original A1.”); } } static class ExtenstionTest { public static void MethodA(this TestA A1) { MessageBox.Show(“Extended A1.”); } } 现在,如果我将MethodA称为 TestA a = […]