not is null
От: _NN_ www.nemerleweb.com
Дата: 15.12.19 10:28
Оценка: 20 (2) :))) :)
Как много удивительного кода предоставляет нам C# 8

public class A
{
    static void f(string x)
    {
        if (x is null) throw new System.ArgumentNullException(nameof(x));
        if (x !is null) throw new System.ArgumentNullException(nameof(x));
        
        System.Console.WriteLine(x);
    }
    
    static void Main()
    {
        f(null);
    }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: not is null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 16.12.19 18:47
Оценка: 99 (4)
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, nikov, Вы писали:


_NN>Теперь озадачен чем нужно пользоваться в коде


В `readonly ref int` модификатор `readonly` относится к самому свойству — оно возвращает `ref int` (не-readonly ссылку на int), но не может модифицировать this в стуктуре, которой оно принадлежит.
В `ref readonly int` модификатор `readonly` относится к возвращаемой ссылке — она read-only (ей нельзя что-то присвоить), но само свойство вправе модифицировать this в стуктуре, которой оно принадлежит.

Наконец, `readonly ref readonly int` возвращает read-only ссылку на int, и не может модифицировать this в стуктуре, которой оно принадлежит.
Отредактировано 16.12.2019 18:48 nikov . Предыдущая версия .
Re: not is null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 15.12.19 19:21
Оценка: 38 (2) :))
Здравствуйте, _NN_, Вы писали:

_NN>Как много удивительного кода предоставляет нам C# 8


// Не путай!
struct S
{
    public readonly ref int X => throw null;
    public ref readonly int Y => throw null;
}
Re[3]: not is null
От: Ночной Смотрящий Россия  
Дата: 15.12.19 16:09
Оценка: :)
Здравствуйте, _NN_, Вы писали:

_NN>Пожалуйста

_NN>https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgBRRwAM6AXugJT6HFEBuAhgE7pe6ALzN0AQgCWAZ3QA7AK4AbZRIDcnIgF9k2oA

А вот так вообще прекрасно
public void M(bool? z ) {
    var a = !z !is null!;
}
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: not is null
От: Ночной Смотрящий Россия  
Дата: 15.12.19 13:03
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Как много удивительного кода предоставляет нам C# 8


А так можно?
if (x !is null!) throw new System.ArgumentNullException(nameof(x));
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: not is null
От: _NN_ www.nemerleweb.com
Дата: 15.12.19 15:55
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, _NN_, Вы писали:


_NN>>Как много удивительного кода предоставляет нам C# 8


НС>А так можно?

НС>
НС>if (x !is null!) throw new System.ArgumentNullException(nameof(x));
НС>


Пожалуйста
https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYZQAs6AsgBRRwAM6AXugJT6HFEBuAhgE7pe6ALzN0AQgCWAZ3QA7AK4AbZRIDcnIgF9k2oA
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: not is null
От: Kolesiki  
Дата: 15.12.19 18:09
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Как много удивительного кода предоставляет нам C# 8

_NN> if (x is null)

Первый раз вижу такую конструкцию! (кстати, подчистую слизанную с D ) Только... какой в ней смысл по ср. с "== null"?
Re[2]: not is null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 15.12.19 19:51
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Первый раз вижу такую конструкцию! (кстати, подчистую слизанную с D ) Только... какой в ней смысл по ср. с "== null"?


`x == null` может вызвать user-defined operator ==.
Re[2]: not is null
От: dmitry_npi Россия  
Дата: 16.12.19 07:09
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Первый раз вижу такую конструкцию! (кстати, подчистую слизанную с D ) Только... какой в ней смысл по ср. с "== null"?


Побочный эффект от введения pattern matching
Атмосферная музыка — www.aventuel.net
Re[2]: not is null
От: _NN_ www.nemerleweb.com
Дата: 16.12.19 07:36
Оценка:
Здравствуйте, nikov, Вы писали:

Теперь озадачен чем нужно пользоваться в коде
Только Y получается по настоящему только для чтения.

struct S
{
    public readonly ref int X => throw null;
    public ref readonly int Y => throw null;
    
    public ref int Z => throw null;
    
    void f()
    {
        var s = new S();
        
        ref readonly var x = ref s.X;        
        ref var x2 = ref s.X; // Ok
        
        ref readonly var y = ref s.Y;
        // ref var y2 = ref s.Y; // Error: s.Y is readonly
    }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: not is null
От: _NN_ www.nemerleweb.com
Дата: 16.12.19 19:06
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, _NN_, Вы писали:


_NN>>Здравствуйте, nikov, Вы писали:


_NN>>Теперь озадачен чем нужно пользоваться в коде


N>В `readonly ref int` модификатор `readonly` относится к самому свойству — оно возвращает `ref int` (не-readonly ссылку на int), но не может модифицировать this в стуктуре, которой оно принадлежит.

N>В `ref readonly int` модификатор `readonly` относится к возвращаемой ссылке — она read-only (ей нельзя что-то присвоить), но само свойство вправе модифицировать this в стуктуре, которой оно принадлежит.

N>Наконец, `readonly ref readonly int` возвращает read-only ссылку на int, и не может модифицировать this в стуктуре, которой оно принадлежит.

Тогда логично, я что-то не подумал про третий вариант
Я так понимаю? первый и третий варианты в классе не разрешенны пока не будет readonly class ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: not is null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 16.12.19 19:37
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Я так понимаю? первый и третий варианты в классе не разрешенны пока не будет readonly class ?


Да, пока только в структурах, на не-статических методах/свойствах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.