我试图返回数组" arr "根据输入对象类型的类型,可以是string[]
或string
public static object custom_return(object ob, string[] arr)
{
return ob.GetType() == typeof(string) ? arr[0] : arr;
}
此代码无法编译,因为
ErrorCS0173无法确定条件表达式的类型 因为' string'之间没有隐式转换。和 '串[]'
但如果分手了
public static object custom_return(object ob, string[] arr)
{
if (ob.GetType() == typeof(string))
return arr[0];
else
return arr;
}
根本没问题。为什么会这样?
答案 0 :(得分:4)
它不起作用,因为在三元运算符中,第二类必须匹配(隐式或显式)第一类(反之亦然)。
如果您执行此操作:
return ob.GetType() == typeof(string) ? (object)arr[0] : arr;
因为string[]
可以隐式转换为object
相反(施放string[]
到object
)也可以使用
三元运算符中两个成员之间的类型匹配在分配给结果之前进行评估,因此在您的情况下,它会在它甚至知道它将被分配给错误之前给出错误。 object
{所以它不能推断两种类型都应该能够隐式转换为object
)
请注意(这是主观的和可观察的),我在类型不匹配时更喜欢if/else
(我倾向于将三元表达视为&#34 ;单值")。对我而言,它使代码更具可读性并且不易出错。
答案 1 :(得分:2)
来自MSDN:
first_expression和second_expression的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。
在您的情况下,string
和string[]
之间不存在隐式转换。