gpt4 book ai didi

c# - Lambda 委托(delegate)决议

转载 作者:行者123 更新时间:2023-11-30 20:11:12 28 4
gpt4 key购买 nike

我目前正在阅读 Jon Skeet 的 C# in depth 第 2 版,我想到了以下问题:

编译器如何能够在 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)));

提前致谢

最佳答案

它选择那个是因为它在子类中并且它更喜欢那些。

例如:

public class MyList<T> : List<T>
{
public int Sort2(MyComparison<T> comparison)
{
}
public int Sort2(Comparison<T> comparison)
{
}
}

在这种情况下,它不再理解并且:

list.Sort2((product1, product2) => product1.Name.CompareTo(product2.Name));

你会得到一个“调用不明确”的错误。

关于c# - Lambda 委托(delegate)决议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4069964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com