Tag: 扩展方法

具有可空值类型参数的扩展方法解析

public static class Extension { public static void Test(this DateTime? dt) { } } void Main() { var now = DateTime.Now; Extension.Test(now); // ok now.Test(); // compile time error } 我只是好奇,为什么编译器在作为扩展名调用时无法解析相同的方法?

优化的JSON序列化器/解串器作为扩展方法?

我想尽可能容易地将任何对象序列化为JSON,然后简单地将其转换回type = safe对象。 任何人都可以告诉我在“FromJSONString”扩展方法中我做错了什么? 编辑 为方便起见,下面是一个完整的function扩展方法。 如果你看到错误,请告诉我。 public static string ToJSONString(this object obj) { using (var stream = new MemoryStream()) { var ser = new DataContractJsonSerializer(obj.GetType()); ser.WriteObject(stream, obj); return Encoding.UTF8.GetString(stream.ToArray()); } } public static T FromJSONString(this string obj) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj))) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); T ret = (T)ser.ReadObject(stream); […]

字符在字符串数组中出现的最大出现次数

在C#中,给定数组: string[] myStrings = new string[] { “test#test”, “##test”, “######”, // Winner (outputs 6) }; 如何找到字符#出现在单个字符串中的最大出现次数? 我目前的解决方案是: int maxOccurrences = 0; foreach (var myString in myStrings) { var occurrences = myString.Count(x => x == ‘#’); if (occurrences > maxOccurrences) { maxOccurrences = occurrences; } } return maxOccurrences; 使用linq可以直接在myStrings[]数组上进行myStrings[]吗? 这可以成为一个可以在任何IEnumerable上工作的扩展方法吗?

如何将2个generics类型传递给扩展方法

我创建了以下扩展方法 public static T Map(this TEntity entity) where TEntity : IEntity { return Mapper.Map(entity); } 这允许以下内容 Db.ExchangeSets.FirstOrDefault().Map() 但是我想知道无论如何我可以修改扩展方法,所以我可以调用如下的缩短版本 Db.ExchangeSets.FirstOrDefault().Map() 请注意 : 是否应该像这样使用automapper不在问题的范围内,它更像是一个事实发现任务 更新 对于那些在家里玩的人,在scotts评论的帮助下,我设法在autneric 扩展方法中找到了上述函数的额外求解 public static T Map(this IEntity entity) { return (T)Mapper.Map(entity, entity.GetType(), typeof(T)); } 但是除了AutoMapper之外,这不是实际问题的答案,而是相应地标记优点

使用策略模式在C#上实现多参数C ++模板行为

我正在尝试使用C#generics和基于此答案的策略模式实现类似c ++的模板 这是模式的一个示例: interface ISomePolicy { void _doSomething(U u); } class MyClass: ISomePolicy, ISomePolicy { internal T myElement {get;set;} public MyClass(T Element) { myElement = Element; } void ISomePolicy._doSomething(double u) { Console.WriteLine(“this is int, double”); } void ISomePolicy._doSomething(int u) { Console.WriteLine(“this is int, int”); } } static class MyClassExtension { //What I want to do […]

运算符作为C#中的方法参数

我不认为使用运算符作为C#3.0中方法的参数是可能的,但有没有办法模拟那个或一些语法糖,使它看起来像是在发生什么? 我问,因为我最近在C#中实现了鹅口疮组合,但是在翻译Raganwald的Ruby例子时 (1..100).select(&:odd?).inject(&:+).into { |x| x * x } 其中写着“从1到100取数字,保留奇数,取这些数字的总和,然后回答那个数字的平方。” 我对Symbol#to_proc的东西不满意 。 这是&:在select(&:odd?)和上面的inject(&:+) 。

C#:隐式运算符和扩展方法

我正在尝试创建一个包含Expression<Func>的PredicateBuilder类,并提供一些方法来使用各种And和Or方法轻松构建表达式。 我认为如果我可以直接使用这个PredicateBuilder作为Expression<Func>会很酷,并认为这可以通过implicit operator方法来完成。 这个类的剥离版看起来像这样: class PredicateBuilder { public Expression<Func> Predicate { get; protected set; } public PredicateBuilder(bool initialPredicate) { Predicate = initialPredicate ? (Expression<Func>) (x => true) : x => false; } public static implicit operator Expression<Func>( PredicateBuilder expressionBuilder) { return expressionBuilder.Predicate; } } 然后,就像测试一样,我在静态类中有这个扩展方法: public static void PrintExpression(this Expression<Func> expression) { Console.WriteLine(expression); } 在我的脑海中,我应该能够做到这些: […]

如何使用另一个也从查询中提取的对象的值来设置linq查询中所有项的属性?

我有一个从数据库中提取的查询: List items = new List(from i in context select new myClass { A = iA, B = “”, // i doesn’t know this, this comes from elsewhere C = iC } 我还有另一个查询做类似的事情: List otherItems = new List(from j in context select new myClass2 { A = jA, // A is the intersection, there will […]

为通用参数指定构造函数约束

我有一组对象,我作为参数传递给另一种类型的对象(一对一)。 我在很多地方这样做(基本上是从数据对象转换为业务对象)。 我想写一个通用的扩展方法来完成这个。 但是我被卡住了,因为我不知道如何指定业务对象具有将数据对象作为参数的构造函数的约束。 以下是我的function代码: public static IList ConvertTo(this IEnumerable list) where T : new(A)/*THIS IS PROBLEM PART*/ { var ret = new List(); foreach (var item in list) { ret.Add(new T(item)); } return ret; }

来自string,int等的枚举

使用扩展方法,我们可以通过为枚举创建扩展方法ToInt() , ToString()等来创建将枚举转换为其他数据类型(如string,int)的方法。 我想知道如何实现其他方式,例如FromInt(int) , FromString(string)等。据我所知,我无法创建MyEnum.FromInt() (静态)扩展方法。 那么可能的方法是什么?