9

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

// 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' 之间没有隐式转换

4

2 回答 2

14

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

你可以让它像这样工作:

propertyGrid.Instance = (directoryRecord.directoryInfo != null) 
    ? (object)directoryRecord.directoryInfo 
    : (object)directoryRecord.fileInfo;
于 2012-10-15T11:45:05.657 回答
2


,两个返回值最终都需要存储在保存结果的同一个变量中。
所以编译器必须有一种方法来决定该变量/存储区域的类型。
由于语言类型安全,您必须知道类型,并且它们最终都会出现在同一个变量中。

于 2012-10-15T11:48:08.460 回答