我有一个名为Sample的类,其名称为Name,ToString()的字符串属性被重写以返回Name属性。
然后我创建了两个实例s1和s2,s1初始化并且它的Name属性设置为" ABC"并且s2设置为null。
当我尝试使用??打印值时? c#的运算符,值字符串" Null"不打印s2。
class Program
{
static void Main(string[] args)
{
Sample s1 = new Sample();
s1.Name = "ABC";
Sample s2 = null;
Console.WriteLine("Some Sample Name : " + s1 ?? "Null");
Console.WriteLine("Some Sample Name : " + s2 ?? "Null");
Console.ReadLine();
}
}
class Sample
{
string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public override string ToString()
{
return Name;
}
}
输出:
Some Sample Name : ABC
Some Sample Name :
答案 0 :(得分:5)
这是一个operator precedence问题,您的代码首先执行+
,将"Some Sample Name : "
文字与s1
合并,然后应用??
这一点。
由于s1
和s2
是Sample
,而不是String
,因此您无法使用s1 ?? "Null"
。可能最简单的事情是使用条件运算符:
Console.WriteLine("Some Sample Name : " + (s1 == null ? "Null" : s1.ToString()));