我想知道 .Net 框架中是否提供了一个实现 IComparer 并且可以从 lambda 函数构造的类。能够做到这一点会很有用:
void SortByLength(List<string> t)
{
t = t.OrderBy(
s => s,
Comparer<string>.FromLambda((s1,s2) => s1.Length.CompareTo(s2.Length))
).ToList();
}
Run Code Online (Sandbox Code Playgroud)
这比每次都必须定义一个 Comparer 类要容易得多。我知道创建这样的 FromLambda 方法并不复杂,但我想知道框架中是否存在现有方法,因为我认为这是一个非常常见的功能。
其他答案来自 .NET 4.5 发布之前。但是使用 .NET 4.5 (Visual Studio 2012) 的 BCL,您只需说
Comparer<string>.Create((s1,s2) => s1.Length.CompareTo(s2.Length))
Run Code Online (Sandbox Code Playgroud)
你为什么要把事情搞得这么困难?
按长度排序列表非常简单:
var ordered = list.OrderBy(s => s.Length);
Run Code Online (Sandbox Code Playgroud)
如果您确实需要那些复杂的东西,ComparisonComparer 可以帮助您。请看这里:将比较转换为 icomparer
这是从 lamda 或 delegate 构建 IComparer!
这是该示例中的基本代码
public class ComparisonComparer<T> : IComparer<T>
{
private readonly Comparison<T> _comparison;
public ComparisonComparer(Comparison<T> comparison)
{
_comparison = comparison;
}
public int Compare(T x, T y)
{
return _comparison(x, y);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |