如何根据条件为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}";