Как использовать условный оператор с интерполяцией строк? - PullRequest
0 голосов
/ 01 августа 2020

Я сейчас использую эту технику:

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

Я хочу сделать что-то вроде:

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

Ответы [ 3 ]

5 голосов
/ 01 августа 2020

Вы должны заключить выражение в круглые скобки, например:

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

Причина в том, что двоеточие сигнализирует о строке формата для чего-то.

1 голос
/ 01 августа 2020

Вы можете легко сделать это с помощью пары парантес вокруг условного выражения, но лучшим решением было бы сделать приветствие многоразовым, определив свойство в классе:

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.";
}
0 голосов
/ 01 августа 2020

Можно использовать вот так

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