В C#, используя метод структуры hashcode и list .foreach , показывает поведение, которое я не могу объяснить:
Две приведенные ниже фрагменты не возвращают один и тот же результат:
PrettyPrint-Override ">var hashCodeLambda = new HashCode();
strings.ForEach(str => hashCodeLambda.Add(str));
< /code>
не работает: < /li>
< /ul>
var hashCodeDelegate = new HashCode();
strings.ForEach(hashCodeDelegate.Add);
Кто-нибудь знает, почему?List strings = ["test1", "test2"];
var hashCodeLambda = new HashCode();
var hashCodeLoop = new HashCode();
strings.ForEach(str => hashCodeLambda.Add(str));
foreach (string str in strings)
{
hashCodeLoop.Add(str);
}
Console.WriteLine($"Expected: {hashCodeLambda.ToHashCode()} / {hashCodeLoop.ToHashCode()}");
var hashCodeDelegate = new HashCode();
strings.ForEach(hashCodeDelegate.Add);
Console.WriteLine($"Unexpected: {hashCodeDelegate.ToHashCode()}");
Console.WriteLine($"Empty hashcode: {new HashCode().ToHashCode()}");
< /code>
Пример вывода: < /p>
Expected: -952326020 / -952326020
Unexpected: 2034223959
Empty hashcode: 2034223959
Подробнее здесь: https://stackoverflow.com/questions/797 ... hcode-addt