如何根据条件为string.Format()提供参数?

时间:2017-03-09 20:28:04

标签: c#

如果hasSecond == false,我想写

myString = string.Format(CultureInfo.InvariantCulture, 
      "{0}", 
      "first");

如果hasSecond == true,我想写

myString = string.Format(CultureInfo.InvariantCulture, 
      "{0}{1}", 
      "first", 
      "second");

如何将它们组合在一起?

例如,通过使用条件表达式,以下似乎不起作用,因为它不会使第四个参数成为可选:

myString = string.Format(CultureInfo.InvariantCulture, 
      "{0}" + (hasSecond == true ? "{1}" : string.Empty), 
      "first", 
      hasSecond == true ? "second" ; string.Empty);

hasSecond==false时,它变为

myString = string.Format(CultureInfo.InvariantCulture, 
      "{0}" + string.Empty, 
      "first", 
      string.Empty);

我们只有一个占位符{0},同时有两个参数"first"string.Empty来填充它。

3 个答案:

答案 0 :(得分:4)

myString = string.Format(CultureInfo.InvariantCulture, 
  "{0}{1}", 
  "first", 
  hasSecond ? "second" : string.Empty);

这应该有效

答案 1 :(得分:1)

正如我在评论中写的那样,第二个if条件是不必要的,因为如果变量有正确的占位符,变量只会出现在字符串中。

在这种情况下,第二个变量不会以字符串结尾:

static void Main(string[] args)
{
    double var1 = 99.9;
    double var2 = 99.1;

    bool condition = false;

    string res = string.Format(CultureInfo.InvariantCulture, "{0}" + (condition ? "{1}" : string.Empty), var1, var2);

    Console.WriteLine(res);

    Console.ReadLine();
}

修改

比较Answer by Jianping Liu
我能看到的唯一区别是,如果你有一个更长的字符串,并希望在某些位置插入值,那么最后设置条件可能更方便,并使第二个占位符{1}保持在所有位置例:

string res = string.Format(CultureInfo.InvariantCulture, 
           "The measurement revealed a value of: {0}{1} bla bla", 
           var1, condition ?  " which strongly depends on the value of: " + var2 : string.Empty);

比较:

string res = string.Format(CultureInfo.InvariantCulture,
             "The measurement revealed a value of: {0}" +
              (condition ? " which strongly depends on the value of: {1}" : string.Empty) + 
              " bla bla", var1, var2);

但我想这对你来说更具可读性是一个品味问题。

答案 2 :(得分:0)

string value = $"{first}{hasSecond ? second : string.Empty}";