Слушайте, а вот эта хрень должна компилироваться? И последний Roslyn, и последний Mono дают ошибку. Где они там в последней строке находят 'int'?
public static class Program
{
public static void Main()
{
var array = new[] { 0, 1, 2, 3 };
int? item = array?[0];
bool foo = item.HasValue; // Ok
bool bar = (array?[0]).HasValue; // Ok
bool baz = array?[0].HasValue; // Error CS1061
// 'int' does not contain a definition for 'HasValue' and
// no extension method 'HasValue' accepting a first argument
// of type 'int' could be found(are you missing a using directive
// or an assembly reference ?)
}
}
Не, ну учитывая, что у оператора обращения к члену типа приоритет выше, чем у оператора ?[], оно, возможно, и не должно компилироваться. Но откуда 'int'?
PS
Упс, не, приоритет не выше, приоритет одинаковый.