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

如果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来填充它。

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

这应该工作

正如我在评论中已经写过的那样,第二个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(); } 

编辑:

比较刘建平的答案 :
我能看到的唯一区别是,如果你有一个更长的字符串并且想要在某些位置插入值,那么在最后设置条件可能更方便,并且在所有情况下保留第二个占位符{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); 

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

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