В инструкции If Когда я должен использовать операторы =, ==. Есть ли оператор ===? В чем разница между этими операторами?Использование равных операторов в C#
ответ
= это назначение, как и в
var i = 5;
Не следует использовать этот оператор в, если заявление.
== для сравнения как в
if(i == 6){...}
нет === оператора в C#
Итак, если я использую его так: ......... if (i = 5) {x = 10;} ...... в этом случае i присваивается значение 5? – subanki
C# достаточно умен, чтобы предупредить вас, когда вы пытаетесь скомпилировать этот код. это должно быть, если (i == 5) {x = 10;} EDIT: Пояснения – tenor
Я собирался сказать, что это скомпилируется. Я даже не уверен, что придет предупреждение. EDIT: Я знаю, что VB скомпилирует его. И я не думаю, что вы когда-нибудь попадете внутрь блока if. –
одного = для присваивания, как:
String myString = "Hi There";
Двойной равный для сравнения
if (5 == 5)
{
do something
}
тройные равно в некоторых языках означают точно равны.
C# не использует этот оператор.
В C# нет ===. –
Один знака равенства используется только для присвоения переменного значения, то присваивание также возвращает одно и то же значение, поэтому я мог бы использоваться в выражении if, но никогда не должен (почти ...) использоваться в выражении if. Двойные знаки равенства используются для проверки того, являются ли два значения равными и что вы используете большую часть времени. Я не знаю оператора ===.
/Виктор
В, если заявление вы обычно проверить равенство с помощью ==, оператор = является оператором assignemt, и мне известно, нет === В C# я никогда не слышал об этом, но это существует в других языках, я думаю, что в javascript он делает.
=
является оператором присваивания в то время как
==
является оператором Comparision
Пример:
int a=2;
int b=3;
int c=a=b; // a, b, c is equal to 3 as b=3
в то время как
int a=2;
int b=3;
bool c= a==b // c = false since result of a==b is false
В дополнение к другим ответам, ReferenceEquals(x,y)
, вероятно, является самым близким к ===
.
Дополнительную информацию можно получить у оператора неравного значения: !=
.
Более подробная информация об операторах C#: http://msdn.microsoft.com/en-us/library/6a71f45d%28v=VS.100%29.aspx
я наткнулся ===
только в JavaScript пока. Там есть строгий равный оператор. Я использовал его несколько раз, как это if(obj === undefined){ alert("obj has sublimed");}
Довольно уверен, что вы имели в виду: if (typeof obj === 'undefined') {alert ("obj has sublimed");} --- ваш пример по определению возвращает ошибку ссылки – Carnix
@Carnix Да, вы правы, (typeof obj === 'undefined') '- лучший способ его использования. Кроме того, уже давно я опубликовал этот ответ: -D и узнал больше до сегодняшнего дня, чем то, что я знал в 2011 году. – v1p
(Ниже в некоторой степени «комментарий», но это слишком долго, чтобы быть в комментарии и будут потеряны с другими комментариями в этом посте.)
В C# ==
(как все операторов в C#) является не полиморфным. То есть, «версия» ==
, которая вызывается всегда, основана на статическом типе во время компиляции.
Например:
object a = Guid.NewGuid();
object b = new Guid(""+a);
a == b // false -- uses object.== -- an *identity* compare
Equals
виртуальный метод, с другой стороны, определяется на object
и, таким образом, полиморфными во всех подтипов.
object a = Guid.NewGuid();
object b = new Guid(""+a);
a.Equals(b) // true -- uses Guid.Equals
Выбор из которых один использовать (==
или Equals
) иногда тонкая - но важно. Большинство типов коллекций будут использовать Equals
для таких задач, как Contains
и т.д. (Это в значительной степени требуется для всех общих контейнеров, нет T.==
для произвольного типа T
.)
// compile-time error: Operator '==' cannot be applied to operands of type 'T' and 'T'
bool equals<T> (T a, T b) { return a == b; }
// fair-game, because object defines Equals and it's polymorphic to subtypes
bool equals<T> (T a, T b) { return a.Equals(b); }
См When should I use == and when should I use Equals? и Guidelines for Implementing Equals and the Equality Operator (==) и т.д. лично я использую ==
над Equals
для статический разрешаемых конкретных типов, для которых ==
хорошо определен и я не будет (по договору или конвенция) сделки с подтипом - примеры являются string
и типов (большинство) структур (например int
, Guid
).
Счастливое кодирование.
Редактировать: Нет оператора C# ===
(как говорили люди, duh!). Если говорить о варианте JavaScript, было бы приблизительно:
bool trippleEquals (object a, object b) {
return a.GetType() == b.GetType() && a.Equals(b);
}
(Это строгое равенство в JavaScript - но не приемлю идентичности).
Если говорить о идентичности объекта, то она должна быть такой же, как (object)a == (object)b
, который имеет ту же семантику, object.ReferenceEquals(a,b)
.
Это длинный комментарий, поэтому я решил добавить еще одно сообщение.
Я установил Var переменных в список объектов этого и производится сравнение по двум переменным, которые всегда неудавшемуся сравнению логика:
object Object1;
object Object2;
var v1 = Object1;
var v2 = Object2;
if (v1 != v2)
{
// Do something
}
Благодаря постам здесь, в этой теме, я изменил логику следующим образом и теперь он отлично работает:
object Object1;
object Object2;
var v1 = Object1;
var v2 = Object2;
if (!v1.Equals(v2))
{
// Do something
}
- 1. Использование операторов выводов - C
- 2. Два равных (назначить) операторов в одной строке
- 3. Использование реляционных операторов в C++
- 4. C# Использование операторов Select Linq?
- 5. Использование равных в общем методе
- 6. Нужна помощь в вычислении повторяющихся равных и событий операторов добавок
- 7. Использование `this` в операторов
- 8. Использование нескольких операторов if else в C++
- 9. Использование операторов getopt() и switch в C
- 10. Использование операторов if с строками в C++
- 11. Использование операторов в списках
- 12. Использование случайных операторов
- 13. Использование побитовых операторов
- 14. C++: «Наблюдать» использование операторов «new», «delete»
- 15. Использование символов, считанных scanf() как операторов C
- 16. Использование операторов Switch в Javascript
- 17. Перегрузка операторов в C++
- 18. Использование перегруженных операторов в разы
- 19. перегрузка операторов "+" и "++" в C#
- 20. Java: Правильное использование условных операторов
- 21. Использование операторов «и» в if
- 22. Использование операторов в строках JavaScript
- 23. Использование логических операторов в pyDatalog
- 24. Использование операторов if в Swift?
- 25. Использование операторов в массиве Javascript
- 26. Использование реляционных операторов в подзапросах
- 27. Использование операторов $ и %% в R
- 28. Использование операторов мод в ada
- 29. Использование пользовательских операторов в сочетании
- 30. Использование вложенных операторов в JS?
Какая книга вы используете для обучения C#? Это должно быть рассмотрено в первой главе или двух. –
Извините, не могу сказать вам имя книги, это было бы как оскорбление автора :). Его печальные примеры не очень хорошо объясняются в этой книге :( – subanki
@subanki: Если вы считаете книгу *, что плохо, ** получите другую **. В чем смысл тратить время на изучение языка с книга, которую вы даже согласитесь, настолько плоха, что это смутит автора? См. [этот вопрос] (http://stackoverflow.com/questions/477748/what-are-the-best-c-net-books), и [это другой вопрос] (http://stackoverflow.com/questions/46048/what-is-the-best-book-to-learn-c) для некоторых рекомендаций. –