Não entendo por que esse código gera um nullref. Acho que tem algo a ver com a prioridade do operador 'mais' e do operador 'é', mas não sei bem por quê.
return "somestring " + B is not null ? $" {B.Property}" : "empty";
Amostra completa:
internal class Program
{
static void Main(string[] args)
{
var a = new A();
Console.WriteLine(a.ToString());
Console.ReadKey();
}
}
public class A
{
public B? B { get; set; }
public override string ToString()
{
return "somestring " + B is not null ? $" {B.Property}" : "empty"; //nullref
return "somestring " + (B is not null ? $" {B.Property}" : "empty"); //works
}
}
public class B
{
public string Property { get; set; } = "Property";
}
Bem, o problema está na ordem de execução :
"somestring " + B
(vai ser"something " + null == "something "
)"somestring " is not null
(true
, já que"something "
não é nulo)$" {B.Property}"
- exceção é lançada porqueB
énull
Vamos adicionar parênteses para mostrar a ordem real:
Na segunda versão
temos uma ordem diferente
(B is not null ? $" {B.Property}" : "empty")
-"empty"
, já queB
énull
."somestring " + "empty" == "something empty"