vc *_* 74 2 c# lambda delegates
我正在深入阅读Jon Skeet的C#第二版,我想到了以下问题:
怎么样能够之间进行选择的编译器list.Sort(Comparison<T>),并list.Sort(MyComparison<T>)在下面的例子:
// MyComparison has the same signature as Comparison<in T>
public delegate int MyComparison<in T>(T x, T y);
public class MyList<T> : List<T>
{
// Sort is like Sort(Comparison<T>) except it takes a MyComparison<T> in parameter
public int Sort(MyComparison<T> comparison)
{
Console.WriteLine("Sort MyComparison<T>");
return -1;
}
}
MyList<Product> list = new MyList<Product>();
list.Sort((product1, product2) => product1.Name.CompareTo(product2.Name));
// Equivalent to
list.Sort(new MyComparison<Product>((product1, product2) => product1.Name.CompareTo(product2.Name)));
// But not equivalent to...
list.Sort(new Comparison<Product>((product1, product2) => product1.Name.CompareTo(product2.Name)));
Run Code Online (Sandbox Code Playgroud)
提前致谢
它选择那个,因为它在子类中并且更喜欢那些.
例如:
public class MyList<T> : List<T>
{
public int Sort2(MyComparison<T> comparison)
{
}
public int Sort2(Comparison<T> comparison)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它不再理解了:
list.Sort2((product1, product2) => product1.Name.CompareTo(product2.Name));
Run Code Online (Sandbox Code Playgroud)
而且你得到一个"呼叫是暧昧的"错误.
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |