相关疑难解决方法(0)

传递lambda表达式代替IComparer或IEqualityComparer或任何单方法接口?

我碰巧看到了一些代码,其中这个人将lambda表达式传递给ArrayList.Sort(这里是IComparer)或IEnumerable.SequenceEqual(IEnumerable列表,IEqualityComparer here),其中需要IComparer或IEqualityComparer.

我不能确定我是否看过它,或者我只是在做梦.我似乎无法在这些集合中找到任何接受Func <>或其方法签名中的委托的扩展.

有这样的过载/扩展方法吗?或者,如果没有,是否有可能像这样捣乱并传递一个算法(读委托),其中预期单方法接口?

更新 谢谢大家.那正是我所想.我一定是在做梦.我知道如何编写转换.我只是不确定我是否见过这样的东西,或者只是觉得我已经看过了.

又一次更新 看,在这里,我找到了一个这样的实例.毕竟我并没有做梦.看看这家伙这做什么.是什么赋予了?

这是另一个更新: 好的,我明白了.那家伙正在使用Comparison<T>超载.尼斯.很好,但完全容易误导你.不过很好.谢谢.

linq ienumerable extension-methods icomparer iequalitycomparer

56
推荐指数
6
解决办法
4万
查看次数

接口 - 在C#中实现匿名类?

在C#中是否有一个构造允许您创建一个实现接口的匿名类,就像在Java中一样?

c# anonymous-class

23
推荐指数
2
解决办法
2万
查看次数

如何按顺序将项目列入列表?

我有一个DateTimeOffset对象列表,我想按顺序将新的列表插入到列表中.

List<DateTimeOffset> TimeList = ...
// determine the order before insert or add the new item
Run Code Online (Sandbox Code Playgroud)

对不起,需要更新我的问题.

List<customizedClass> ItemList = ...
//customizedClass contains DateTimeOffset object and other strings, int, etc.

ItemList.Sort();    // this won't work until set data comparison with DateTimeOffset
ItemList.OrderBy(); // this won't work until set data comparison with DateTimeOffset
Run Code Online (Sandbox Code Playgroud)

另外,如何把DateTimeOffset参数作为.OrderBy()

我也尝试过:

ItemList = from s in ItemList
           orderby s.PublishDate descending    // .PublishDate is type DateTime
           select s;
Run Code Online (Sandbox Code Playgroud)

但是,它会返回此错误消息,

无法将类型'System.Linq.IOrderedEnumerable'隐式转换为'System.Collections.Gerneric.List'.存在显式转换(您是否错过了演员?)

c# sorting insert

23
推荐指数
4
解决办法
6万
查看次数

使用Lambda Expression的IComparer

 class p {
     public string Name { get; set; }
     public int Age { get; set; }
 };

 static List<p> ll = new List<p>
 {
     new p{Name="Jabc",Age=53},new p{Name="Mdef",Age=20},
     new p{Name="Exab",Age=45},new p{Name="G123",Age=19}
 };
 protected static void SortList()
 {
     IComparer<p> mycomp = (x, y) => x.Name.CompareTo(y.Name);  <==(Line 1)
     ll.Sort((x, y) => x.Name.CompareTo(y.Name));<==(Line 2)
 }
Run Code Online (Sandbox Code Playgroud)

这里List.sort需要一个IComparer<p>as参数.并且它与lambda一起使用,如第2行所示.但是当我尝试按照第1行的方式执行时,我收到此错误:

无法将lambda表达式转换为System.Collections.Generic.IComparer类型,因为它不是委托类型

我调查了很长一段时间,但我仍然不明白.也许我对IComparer的理解不是很好.可以有人帮我一把吗?

c#-3.0

16
推荐指数
2
解决办法
2万
查看次数