!= null vs. = null

时间:2011-07-28 08:07:52

标签: c# .net null

请先看下面的代码。

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 个答案:

答案 0 :(得分:16)

您正在使用赋值运算符=而不是等于运算符==

尝试:

//(!) 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

答案 1 :(得分:6)

= null 作业。您应该使用== null

您将null值分配给myList[0].Items并尝试在if语句中将其用作bool。这就是无法编译代码的原因 例如,此代码成功编译:

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

因为您将true值设置为b,然后在if语句中进行检查。

答案 2 :(得分:4)

=null您将值设置为null

!= null检查它是否与null

不同

如果要比较它是否等于null,use == null而不是= null。

答案 3 :(得分:4)

'='用于分配,不用于比较。使用'=='

答案 4 :(得分:3)

if (myList[0].Items == null){Console.WriteLine("null!");}

答案 5 :(得分:3)

首先,myList[0].Items = null会将对象设置为null。你可能意思是myList[0].Items == null

关于差异,==检查一下是否相等。 !=检查某些事情是否不相等。

答案 6 :(得分:2)

  

对于预定义的值类型,等于运算符(==)返回true   其操作数的值相等,否则为false。以供参考   除了字符串以外的类型,==如果它的两个操作数引用则返回true   同一个对象。对于字符串类型,==比较的值   字符串。

  

赋值运算符(=)存储其右侧操作数的值   在左侧表示的存储位置,属性或索引器中   操作数并返回值作为结果。操作数必须是   相同的类型(或右手操作数必须是隐含的   可转换为左手操作数的类型。)

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

答案 7 :(得分:2)

= null是一项任务。 == null是一个条件。

答案 8 :(得分:2)

if (myList[0].Items != null)

否定比较。它会检查myList[0].Items 是否等于null

if (myList[0].Items = null)

是一项任务。它通常会将null分配给myList[0].Items并返回true(使用C ++等语言),但是,在C#中,这将无法编译(因为这个常见错误)。

答案 9 :(得分:1)

=是赋值运算符,您应该使用相等运算符==