假设我有一个对象列表,我想按项目DateModified属性对其进行排序.为什么我不能像这样使用委托?如果不是如下所示,我应该如何按DateModified对它们进行排序:
public string SortByDateModified(List<CartItem> items)
{
items.Sort(new Func<CartItem, CartItem, bool>((itemA, itemB) =>
{
return itemA.DateModified < itemB.DateModified;
}));
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*eff 53
Why not use a lambda expression?
public string SortByDateModified(List<CartItem> items)
{
items.Sort((a, b) => a.DateModified.CompareTo(b.DateModified));
}
Run Code Online (Sandbox Code Playgroud)
jjx*_*tra 15
如果您不想使用lambdas或大于.NET 2.0,请使用以下命令:
public string SortByDateModified(List<CartItem> items)
{
items.Sort(delegate(CartItem itemA, CartItem itemB)
{
return itemA.DateModified.CompareTo(itemB.DateModified);
});
}
Run Code Online (Sandbox Code Playgroud)
根据我的经验,在Unity等环境中,lambda甚至代理都可能导致崩溃或问题,尤其是在iOS等平台上.在这种情况下,您可能希望使您的分拣机成为一个单独的功能,如下所示:
int SortCartItemFunction(CartItem itemA, CartItem itemB)
{
return itemA.DateModified.CompareTo(itemB.DateModified);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以将它传递给你的排序调用:
items.Sort(SortCartItemFunction);
Run Code Online (Sandbox Code Playgroud)
ICR*_*ICR 11
该Sort方法需要一个名为的委托Comparison<T>.你试图传入一个Func<int, int, bool>,它本身就是一个委托.委托Func<int, int, bool>与代理之间没有转换Comparison<T>.
但是,您可以使用lambda表达式.
items.Sort((a, b) => a.DateModified.CompareTo(b.DateModified));
Run Code Online (Sandbox Code Playgroud)
实际上,您使用这个非常lambda表达式并将其传递给Func<int, int, bool>构造函数*.但是,没有必要.lambda表达式可以转换为签名匹配的任何委托 - (a, b) => a.DateModified.CompareTo(b.DateModified)可以分配给键入的内容Func<int, int, int>或键入的内容Comparison<T>.在这种情况下,我们将它传递给期望a的东西Comparison<T>.
*只需一个小调整.排序取决于整数作为返回类型.负值表示小于,0表示相等,正值表示大于.