Лямбда-выражение: == по сравнению с.Equals ()

Это - чисто академический вопрос, но каково различие между использованием == и.Equals в лямбда-выражении и какой предпочтен?

Примеры кода:

int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId == categoryId);

или

int categoryId = -1; 
listOfCategories.FindAll(o => o.CategoryId.Equals(categoryId));
15
задан Robert W 16 February 2010 в 15:15
поделиться

6 ответов

Для ссылочных типов == предназначен для передачи ссылочного равенства - две переменные относятся к одинаковым ] экземпляр объекта.
.Equals () предназначен для передачи равенства значений - имеют ли два, вероятно, разных экземпляра объекта, на которые ссылаются две переменные, одно и то же значение, для некоторого определения «того же», которое вы даете путем перегрузки метода.

Для типов значений эти два значения размыты.

9
ответ дан 1 December 2019 в 04:40
поделиться

Их можно перегрузить отдельно, чтобы они могли давать разные ответы. См. http://msdn.microsoft.com/en-us/library/ms173147 (VS.80) .aspx , где обсуждается, как перегрузить каждый. Обычно они будут такими же, но гарантии этого нет. Так что это зависит от типа лямбда-объекта.

2
ответ дан 1 December 2019 в 04:40
поделиться

Это дубликат

C # разницы между == и Equals ()

Дополнительные мысли о различных видах равенства и о том, как ни один из них не делает то, что вы действительно хотите, см.

http: / /blogs.msdn.com/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx

2
ответ дан 1 December 2019 в 04:40
поделиться

Я думаю, что если вы говорите о компилированных двоичных там мало вы можете сделать, (возможно, только применить UPX или связанный инструмент), который не делает много смысла, так как он может быть обращен.

Если вы говорите о написании нового кода, попробуйте Self Modyfing C Code , который, вероятно, будет самым сложным способом перепроектирования вашего приложения.

-121--1595031-

OleDbCommand и OleDbConnection являются общими. SqlCommand и SqlConnection специфичны для SQL Server и могут использовать его возможности. Они также раскрывают возможности SQL Server. Например, их можно использовать для управления столбцами XML.

-121--4950454-

Лямбда здесь не имеет значения...

Для объектов значений = = и равны одинаковы Для ссылочного объекта = = будет true, если объекты являются одним и тем же объектом (указывает на один и тот же экземпляр), в то время как ожидается, что будет равно сравнивать содержимое объектов. Эта ссылка объясняет это другим способом.

0
ответ дан 1 December 2019 в 04:40
поделиться

Это зависит от того, что определено для объекта. Если для класса не определен оператор ==, он будет использовать оператор из класса Object, который проверяет Object.ReferenceEquals перед вызовом Equals ().

Это показывает важное различие: если вы скажете A.Equals (B) , то A должно быть nun-null. если вы скажете A == B , A может быть пустым.

0
ответ дан 1 December 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: