Tag: extension methods

如何在没有嵌套类的情况下在Azure Functions中共享扩展方法?

我知道如何通过#load包含其他.csx文件。 但是,必须在顶级类中定义扩展方法,并且#load嵌套该类,因此它不是顶级的,并且该函数会抛出编译错误。 如何使用共享代码而不将其嵌套在函数的后编译类中?

将算法从C#转换为VB.NET失败

我正在尝试将以下算法从C#转换为VB.NET,而我所拥有的VB.NET并没有产生与我的C#算法相同的结果,有人可以告诉我在转换中出错了吗? public static IEnumerable Combinations(this IEnumerable elements, int k) { List result = new List(); // single combination if (k == 0) { result.Add(new T[0]); } else { int current = 1; foreach (T element in elements) { //combine each element with k-1 combinations of subsequent elements result.AddRange(elements .Skip(current++) .Combinations(k – 1) .Select(combination => (new […]

在EF 6中缺少QueryableExtensions

我无法调用EntityFramework 6提供的新QueryableExtensions ( ToListAsync , ForEachAsync ,…)但我可以调用其他人( Include , Intersect )。 我有一个System.Data.Entity的引用。 显然,我有一个较旧版本的System.Data.Entity ,以及最新版本的EntityFramework。 可能吗? 我的代码无法编译,我无法在对象浏览器中看到ForEachAsync方法。 我正在使用Visual Studio 2013,.Net 4.5,EntityFramework 6.1.3,Wpf。 编辑 entity framework已安装: 我已经尝试卸载然后重新安装包多次,重新启动visual studio。 还是行不通 编辑 在另一个项目(由此引用)中,我可以在对象浏览器中看到所需的IQueryableExtensions 。 如果我将此项目添加到我的解决方案中(在它只是一个引用之前),则对象浏览器中缺少所需的IQueryableExtensions 。

IEnumerable 的扩展方法?

我有一堆不同的枚举,比如…… public enum MyEnum { [Description(“Army of One”)] one, [Description(“Dynamic Duo”)] two, [Description(“Three Amigo’s”)] three, [Description(“Fantastic Four”)] four, [Description(“The Jackson Five”)] five } 我为任何Enum编写了一个扩展方法,以获取Description属性(如果有)。 很简单吧…… public static string GetDescription(this Enum currentEnum) { var fi = currentEnum.GetType().GetField(currentEnum.ToString()); var da = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute)); return da != null ? da.Description : currentEnum.ToString(); } 我可以非常简单地使用它,它就像一个魅力,返回描述或ToString()按预期。 这是问题所在。 我希望能够在IEnumerable的MyEnum,YourEnum或SomeoneElsesEnum上调用它。 所以我简单地编写了以下扩展名。 public […]

如果为null,则设置为新实例的C#扩展方法

我有以下扩展方法来帮助我检查和实例化它们为null的对象。 前两个工作正常,但它们不是很有用。 public static bool IsNull(this T t) { return ReferenceEquals(t, null); } public static T NewIfNull(this T t, Func createNew) { if (t.IsNull()) { return createNew(); } return t; } public static void Ensure(this T t, Func createNew) { t = t.NewIfNull(createNew); } 最终我想做点什么 IList foo; … foo.Ensure<IList>(() => new List()); 但是,Ensure方法没有达到预期的效果,即如果它为null,则将foo设置为List的实例,否则基本上将其设置为自身。 如果你现在知道我可以调整Ensure方法来实现这一点我会很感激帮助。 谢谢,汤姆

在扩展方法中处理null

我有一个简单的字符串类扩展方法,它将从字符串中删除所有非数字字符。 因此,如果我有一个字符串,例如电话号码,如“(555)215-4444”,它会将其转换为“5552154444”。 它看起来像这样: public static string ToDigitsOnly(this string input) { Regex digitsOnly = new Regex(@”[^\d]”); return digitsOnly.Replace(input, String.Empty); } 我只是想知道在这里处理空值的最优雅方法是什么? 在这些情况下是否存在典型模式,例如,如果传入null,则返回null值? 似乎因为我在这里扩展字符串类,我可能想要允许空值而不抛出争论exception(因为我在使用它时并没有真正传递争论……)? 但是有些人可能会说我应该像普通的方法那样抛出exception。 你在这里使用的最佳做法是什么? 谢谢!

请解释System.Linq.Enumerable.Where(Func predicate)

我无法理解MSDN文档对于接受谓词的Where方法的重载,该谓词有两个参数,其中int,据说代表源元素的索引,无论这意味着什么(我认为一个可枚举的是一个顺序,你看不到下一个项目,更不用说它的任何索引)。 有人可以解释如何使用这个重载,特别是Func中的int是什么以及如何使用它?

“null this”是否可以使用扩展方法?

所以,我真的很喜欢使用扩展方法..也许有点太多了。 所以,我会问我最近的享受,以确保我不会走得太远。 情景是我们有一个Guid? 传入的变量。如果变量为null或Guid.Empty ,那么我们想要使用不同的Guid。 所以,我写了一个扩展方法,让它像英文一样读: internal static Guid OrIfEmpty(this Guid? guid, Guid other) { if (!guid.HasValue || guid.Value == Guid.Empty) { return other; } return guid.Value; } 这自动意味着“null this”不会抛出exception。 例如,这将工作: ((Guid?)null).OrIfEmpty(other); 如果不使用扩展方法,这是不可能的,在我看来可能会产生误导。 然而,它只是如此简洁和干净! 所以你怎么看? 这是可以接受的事情,还是对其他程序员来说太混乱了? 此外,我确信会有其他情况我会做这样的事情并将其检查为null,但这是我现在最好的例子。 注意:我真的不是在问这个Guid? 特别是生意。 我要求更多关于实现的整体模式(有一个扩展方法,其中可以为null )

只使用扩展方法在Linq中很好,干净的交叉连接

可能重复: 用扩展方法表示的嵌套“来自”LINQ查询 我确定以前曾经问过,但我老实说找不到任何东西。 我很好奇下面仅使用内置Linq扩展方法的等效语法: var z1 = from x in xs from y in ys select new { x, y }; 我可以得到相同的结果: var z2 = xs.SelectMany(x => ys.Select(y => new { x, y })); 但它产生不同的IL代码,代码有点复杂且难以理解。 使用扩展方法有更简洁的方法吗? 这是我写的整个测试方法: private void Test() { var xs = new[] { 1D, 2D, 3D }; var ys = new[] { […]

如何为Types创建扩展方法

我正在编写一个扩展方法来解析任何给定类型的JSON字符串。 我想在类型上使用方法而不是像我们已经知道的许多示例那样的实例,但我有点觉得Visual Studio不支持它。 有人可以在这里启发我吗? 以下是方法: public static T ParseJson(this T t, string str) where T: Type { if (string.IsNullOrEmpty(str)) return null; var serializer = new JavaScriptSerializer(); var obj = serializer.Deserialize(str); return obj; } 我想以这种方式调用方法: var instance = MyClass.ParseJson(text); 谢谢