我有一个String.Format方法,我想插入字符串或int,具体取决于是否满足条件。我的代码如下所示:
Box.Text = String.Format("{0}", ScoreBoolCheck ? student1.ScoreInt : "null");
理想情况下,该方法应检查ScoreBoolCheck是否为true,如果是,则插入student1.ScoreInt,但如果不是,则应插入字符串" null"代替。
但是,这还不行。我收到一条警告说" int和string之间没有隐式转换。"有谁知道我在哪里出错?提前感谢您的帮助。
答案 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");
由于存在从string
到object
的隐式转换,因此可以正常工作。假设ScoreInt
是int
,它将被装箱,但是在将参数传递给String.Format
时它仍然会被装箱(其最后一个参数的类型为object[]
)。< / p>
转换是必需的,因为三元表达式必须具有类型。
你不能写:
var x = someCondition ? 42 : Guid.NewGuid();
由于无法为x
分配任何类型,因为int
和Guid
不兼容(这些都不能分配给另一个)。
但如果你写:
var x = someCondition ? (object)42 : Guid.NewGuid();
然后x
明确地表示object
类型。 Guid
可隐式装箱object
。