c#三元运算符返回不同类型

时间:2012-10-15 11:42:59

标签: c#-4.0 ternary-operator

我正在尝试使用三元组来返回不同的类型,尽管我似乎遇到了一些问题。我的问题是三元运算符不能返回不同的类型吗?

// This line causes an error
propertyGrid.Instance = (directoryRecord.directoryInfo != null) 
    ? directoryRecord.directoryInfo 
    : directoryRecord.fileInfo;

// Compiles fine
propertyGrid.Instance = directoryRecord.directoryInfo;

// Compiles fine
propertyGrid.Instance = directoryRecord.fileInfo;

错误

  

由于存在,因此无法确定条件表达式的类型   'System.IO.DirectoryInfo'和。之间没有隐式转换   'System.IO.FileInfo'

2 个答案:

答案 0 :(得分:14)

不,这不是那样的。
条件运算符的表达式具有特定类型。表达式中使用的两种类型必须是相同类型或可以相互隐式转换。

你可以让它像这样工作:

propertyGrid.Instance = (directoryRecord.directoryInfo != null) 
    ? (object)directoryRecord.directoryInfo 
    : (object)directoryRecord.fileInfo;

答案 1 :(得分:3)

没有。
两个返回值最终都需要存储在保存结果的同一个变量中 因此编译器必须有一种方法来决定变量/存储区域的类型 由于语言类型安全,你必须知道类型,它们都将在同一个变量中结束。