Reputation: 4969
I'm trying to use the ternary to return differing types, although I seem to be encountering some problems. My question is can the ternary operator not return differing types?
// 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;
Error
Type of conditional expression cannot be determined because there is no implicit conversion between 'System.IO.DirectoryInfo' and 'System.IO.FileInfo'
Upvotes: 10
Views: 6510
Reputation: 174457
No, this doesn't work like that.
The expression of a conditional operator has a specific type. Both types used in the expression must be of the same type or implicitly convertible to each other.
You can make it work like this:
propertyGrid.Instance = (directoryRecord.directoryInfo != null)
? (object)directoryRecord.directoryInfo
: (object)directoryRecord.fileInfo;
Upvotes: 14
Reputation: 49271
No.
Both return values ultimately need to be stored in the same single variable that will hold the result.
So the compiler has to have a way of deciding the type of that variable / storage area.
Because of the language type safety you have to know the type, and they are both gonna end up in the same variable.
Upvotes: 2