请先看下面的代码。
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
有什么区别?
感谢。
答案 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)
=
是赋值运算符,您应该使用相等运算符==