在String.Format中使用带有混合数据类型的条件运算符

时间:2015-08-22 20:51:26

标签: c# wpf string.format

我有一个String.Format方法,我想插入字符串或int,具体取决于是否满足条件。我的代码如下所示:

Box.Text = String.Format("{0}", ScoreBoolCheck ? student1.ScoreInt : "null"); 

理想情况下,该方法应检查ScoreBoolCheck是否为true,如果是,则插入student1.ScoreInt,但如果不是,则应插入字符串" null"代替。

但是,这还不行。我收到一条警告说" int和string之间没有隐式转换。"有谁知道我在哪里出错?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要将int转换为string

String.Format("{0}", ScoreBoolCheck ? student1.ScoreInt.ToString() : "null"); 

答案 1 :(得分:1)

只需转发object

Box.Text = String.Format("{0}", ScoreBoolCheck ? (object)student1.ScoreInt : "null");

由于存在从stringobject的隐式转换,因此可以正常工作。假设ScoreIntint,它将被装箱,但是在将参数传递给String.Format时它仍然会被装箱(其最后一个参数的类型为object[])。< / p>

转换是必需的,因为三元表达式必须具有类型。

你不能写:

var x = someCondition ? 42 : Guid.NewGuid();

由于无法为x分配任何类型,因为intGuid不兼容(这些都不能分配给另一个)。

但如果你写:

var x = someCondition ? (object)42 : Guid.NewGuid();

然后x明确地表示object类型。 Guid可隐式装箱object