wonea
wonea

Reputation: 4969

c# Ternary operator returning different types

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

Answers (2)

Daniel Hilgarth
Daniel Hilgarth

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

Yochai Timmer
Yochai Timmer

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

Related Questions