! = ноль против = ноль - PullRequest
       46

! = ноль против = ноль

0 голосов
/ 28 июля 2011

Пожалуйста, сначала посмотрите код ниже.

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        public struct MyStruct
        {
            public List<MyStructItem> Items;
        }
        public struct MyStructItem
        {
            public string Value;
        }


        static void Main(string[] args)
        {
            List<MyStruct> myList = new List<MyStruct>();
            myList.Add(new MyStruct());

            //(!) it haven't comipled.
            if (myList[0].Items = null){Console.WriteLine("null!");}

            //(!) but it have compiled.
            if (myList[0].Items != null) { Console.WriteLine("not null!"); }

        }
    }
}

В чем разница между !=null и =null в этом случае?

спасибо.

Ответы [ 10 ]

16 голосов
/ 28 июля 2011

Вы используете оператор присваивания = вместо оператора равенства ==.

Попытка:

//(!) it haven't comipled.            
if (myList[0].Items == null){Console.WriteLine("null!");}            

//(!) but it have compiled.            
if (myList[0].Items != null) { Console.WriteLine("not null!"); }

Разница в том, что один компилируется, а другой нет: -)

C # Операторы:

http://msdn.microsoft.com/en-us/library/6a71f45d(v=vs.80).aspx

6 голосов
/ 28 июля 2011

= null - это назначение . Вы должны использовать == null

Вы присваиваете значение null для myList[0].Items и пытаетесь использовать его как bool в операторе if. Вот почему код не может быть скомпилирован.
Например, этот код успешно компилируется:

bool b;
if (b = true)
{
    ...
}

Поскольку вы устанавливаете true значение на b, а затем проверяете его в выражении if.

4 голосов
/ 28 июля 2011

'=' для назначения, а не для сравнения.Используйте '=='

4 голосов
/ 28 июля 2011

=null вы устанавливаете значение на ноль

!= null вы проверяете, отличается ли оно от нуля

Если вы хотите сравнить, если оно равно нулю, use == nullвместо = ноль.

3 голосов
/ 28 июля 2011

Во-первых, myList[0].Items = null установит объект на ноль.Вы, вероятно, имеете в виду myList[0].Items == null

А что касается разницы, == проверил, что-то равно! = проверяет, если что-то не равно.

3 голосов
/ 28 июля 2011
if (myList[0].Items == null){Console.WriteLine("null!");}
2 голосов
/ 28 июля 2011
if (myList[0].Items != null)

- это отрицательное сравнение .Он проверяет, является ли myList[0].Items не равным null.

if (myList[0].Items = null)

- это присвоение.Обычно он присваивает null myList[0].Items и возвращает true (в таких языках, как C ++), однако в C # он не будет компилироваться (из-за этой общей ошибки).

2 голосов
/ 28 июля 2011

= null является назначением.== null является условием.

2 голосов
/ 28 июля 2011

Для предопределенных типов значений оператор равенства (==) возвращает true, если значения его операндов равны, иначе ложно. Для справки типы, отличные от string, == возвращает true, если два его операнда ссылаются на тот же объект. Для типа строки == сравнивает значения строки.

И

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

Ссылка: http://msdn.microsoft.com/en-us/library/6a71f45d(v=vs.71).aspx

1 голос
/ 28 июля 2011

= - оператор присваивания, вы должны использовать оператор равенства ==

...