Я не знаю, как именно это называется, но сейчас я буду называть это «не нулевым тестом». В C # 8 есть новое поведение, которое позволяет проверить, не является ли объект нулевым, например:
Foo foo = new Foo();
if(foo is { })
{
//foo is not null
}
Вы также можете извлечь свойства из этого объекта:
public class Foo
{
public int Bar { get; set; }
}
Foo foo = new Foo();
if(foo is { Bar: var bar })
{
//Foo is not null and bar contains the value of the property of the foo instance
}
Покахорошо, но я представляю, что это похоже на что-то вроде этого:
public bool GetBar(Foo foo, out int bar)
{
if(foo is null)
{
return false;
}
bar = foo.Bar;
return true;
}
Что будет использоваться примерно так:
Foo foo = new Foo();
if(GetBar(foo, out var bar))
{
//Foo is not null and bar contains the value of the property of the foo instance
}
Теперь мой актуальный вопрос: есть ли способЯ мог бы использовать поведение ref? Что бы выглядело примерно так:
if(foo is { Bar: ref var bar })
{
//Foo is not null and bar contains the value of the property of the foo instance
}
Я бы понял, если этого не существует, поскольку out ref
тоже не существует. Так есть ли какой-нибудь способ, которым вы можете сделать это, или есть что-то, что будет против этого?