Информация об изменениях

Сообщение Re: Ошибки в компиляторах от 29.08.2016 17:47

Изменено 29.08.2016 17:55 alexzzzz

Слушайте, а вот эта хрень должна компилироваться? И последний 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 ?)
    }
}
Слушайте, а вот эта хрень должна компилироваться? И последний 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'?