Как много удивительного кода предоставляет нам 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);
}
}
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, _NN_, Вы писали:
_NN>>Как много удивительного кода предоставляет нам C# 8
НС>А так можно? НС>
НС>if (x !is null!) throw new System.ArgumentNullException(nameof(x));
НС>
Здравствуйте, Kolesiki, Вы писали:
K>Первый раз вижу такую конструкцию! (кстати, подчистую слизанную с D ) Только... какой в ней смысл по ср. с "== null"?
`x == null` может вызвать user-defined operator ==.
Здравствуйте, Kolesiki, Вы писали:
K>Первый раз вижу такую конструкцию! (кстати, подчистую слизанную с D ) Только... какой в ней смысл по ср. с "== null"?
Теперь озадачен чем нужно пользоваться в коде
Только 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; // Okref readonly var y = ref s.Y;
// ref var y2 = ref s.Y; // Error: s.Y is readonly
}
}
Здравствуйте, _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 в стуктуре, которой оно принадлежит.
Здравствуйте, 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 ?