我正在尝试使用三元组来返回不同的类型,尽管我似乎遇到了一些问题。我的问题是三元运算符不能返回不同的类型吗?
// 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'
答案 0 :(得分:14)
不,这不是那样的。
条件运算符的表达式具有特定类型。表达式中使用的两种类型必须是相同类型或可以相互隐式转换。
你可以让它像这样工作:
propertyGrid.Instance = (directoryRecord.directoryInfo != null)
? (object)directoryRecord.directoryInfo
: (object)directoryRecord.fileInfo;
答案 1 :(得分:3)
没有。
两个返回值最终都需要存储在保存结果的同一个变量中
因此编译器必须有一种方法来决定变量/存储区域的类型
由于语言类型安全,你必须知道类型,它们都将在同一个变量中结束。