Questa è una domanda abbastanza frequente.
In C#, quasi sempre ragioniamo dall'interno all'esterno. Quando si vede
x = y;
lavoriamo a ciò che è il tipo di x, qual è il tipo di y, e se il tipo di y è assegnazione compatibile con x. Ma non usiamo il fatto che sappiamo quale sia il tipo di x quando stiamo elaborando il tipo di y.
Questo perché ci potrebbe essere più di una x:
void M(int x) { }
void M(string x) { }
...
M(y); // y is assigned to either int x or string x depending on the type of y
Abbiamo necessità di essere in grado di capire il tipo di un'espressione senza sapere che cosa è stato assegnato.Digitare i flussi di informazioni out di un'espressione, non in un'espressione.
Per calcolare il tipo di espressione condizionale, calcoliamo il tipo di conseguenza e le espressioni alternative, selezioniamo il più generale dei due tipi e questo diventa il tipo di espressione condizionale. Pertanto, nell'esempio, il tipo di espressione condizionale è "int" e non è una costante (a meno che l'espressione di condizione non sia costante true o costante false). Poiché non è una costante, non puoi assegnarla a byte; il compilatore ragiona unicamente dai tipi, non dai valori, quando il risultato non è una costante.
L'eccezione a tutte queste regole è rappresentata dalle espressioni lambda, in cui il tipo di informazioni corrisponde al flusso dal lambda. Ottenere questa logica era molto difficile.
fonte
2010-02-07 04:39:15
possibile duplicato di [tipi Nullable e operatore ternario: perché è \? 10: null \ 'proibito?] (Http://stackoverflow.com/questions/858080/nullable-types-and-the-ternary-operator-why-is-10-null-forbidden) – nawfal