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 に答える