C# ??如果变量为空,运算符不打印值

标签 c#

我有一个名为 Sample 的类,其中有一个名为 Name 的字符串属性,覆盖 ToString() 以返回 Name 属性。

然后我创建了两个实例 s1 和 s2,s1 已初始化,它的 Name 属性设置为“ABC”,s2 设置为 null。

当我尝试使用 ?? 打印值时c# 的运算符,s2 不打印值字符串“Null”。

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 : 

最佳答案

这是一个 operator precedence问题,您的代码首先执行 +,将 "Some Sample Name : " 文字与 s1 组合,然后应用 ?? 到此。

由于 s1s2Sample,而不是 String,因此您不能使用 s1 ?? “空”。可能最简单的事情是使用条件运算符:

Console.WriteLine("Some Sample Name : " + (s1 == null ? "Null" : s1.ToString()));

关于C# ??如果变量为空,运算符不打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25637261/

相关文章:

c# - 聚合根应该有依赖关系吗?

c# - ReaderWriterLockSlim 什么时候比简单的锁更好?

javascript - jQuery Datatables 未序列化超过 1000 条记录

c# - StackOverflow 如何优化问题显示的性能?

c# - await 在转移到与调用者相同的线程之前是否在内部创建另一个线程(对于 UI 应用程序)

c# - 直接调用委托(delegate)、使用 DynamicInvoke 和使用 DynamicInvokeImpl 之间有什么区别?

c# - 我能否使用 Moq 来验证是否使用复杂参数中的特定值调用了模拟方法?

c# - 如何使用旧的 WSDL+XSD 和当前的 Web 服务位置在 C# 中进行 SOAP 调用?

c# - 2 个字符串中的行进字符序列

c# - 如何加快我的 MVC4 应用程序开发速度?