【问题标题】:How to use conditional operator with string interpolation?如何在字符串插值中使用条件运算符?
【发布时间】:2020-11-22 02:02:51
【问题描述】:

我目前正在使用这种技术:

...
    string s = user.Gender ? "Mr." : "Mrs.";
    string body = $@"Dear {s} {user.First_name}..."
...

我想做这样的事情:

...
    string body = $"Dear {return user.Gender ? "Mr." : "Mrs."} {user.First_name}..."
...

【问题讨论】:

  • 对表达式使用括​​号:$"Dear {(user.Gender ? "Mr." : "Mrs.")}"

标签: c# conditional-operator c#-6.0


【解决方案1】:

您可以轻松地在条件表达式周围使用一对paranteces,但更好的解决方案是通过在类上定义一个属性来使问候语可重用:

public class User {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool Gender { get; set; }
    public string Title { get => Gender ? "Mr." : "Mrs."; }
    public string Greeting { get => $"{Title} {FirstName} {LastName}"; }
}

void run()
{
    var user = new User { Gender = true, FirstName = "John", LastName = "Smith" };
    string simpleSolution = $"Dear {(user.Gender ? "Mr." : "Mrs.")} {user.FirstName} {user.LastName}, hello and welcome.";
    string betterSolution = $"Dear {user.Greeting}, hello and welcome.";
}

【讨论】:

    【解决方案2】:

    你需要像这样在表达式周围加上括号:

    string body = $"Dear {(user.Gender ? "Mr." : "Mrs.")} {user.First_name}...";
    

    原因是冒号表示格式字符串。

    【讨论】:

      【解决方案3】:

      你可以这样使用

      bool flag  = true;
      string body = $"Dear {(flag ? "Mr." : "Mrs.")}";
      

      【讨论】:

      • 不是反对者,虽然是一个很好的答案,但我认为 OP 只是想使用 user.Gender 中已经存在的 flag
      • @MickyD 只是一个例子,OP可以参考使用
      猜你喜欢
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 2015-02-14
      • 2016-02-02
      • 2017-07-22
      • 2021-02-22
      • 2018-07-20
      相关资源
      最近更新 更多