For reference in this example I have this Person
type, although it could be any type:
public class Person
{
public Person? Partner { get; set; }
public Person? Child { get; set; }
}
Somewhere else I am checking if the person
has a partner and children, but its not required to assign either.
Currently it looks like:
Person partner = null!;
if (person.Partner is not null)
{
partner = person.Partner;
//do stuff
}
if (person.Child is Person child)
{
if (partner is not null)
{
//do one way
}
else
{
//do other way
}
//do stuff
}
I wanted it to look something along the lines:
if (person.Partner is Person partner)
{
//do stuff
}
if (person.Child is Person child)
{
if (partner is not null)
{
//use partner
}
//other stuff
}
partner
on the last example is considered declared outside of the if statement scope, but is not assigned. How could I, using this pattern, let the compiler know that its either assigned with the person.Partner
reference or null!
?
Much like the out keyword on the following example doesn't throw a "not assigned" error:
SomeMethod(out Person partner);
if(partner is not null) { }
I am learning about the C# patterns and have looked into the documentation and feature proposal and there is no mention of what I was looking for, not even why it is declared outside of the scope preventing me from using the variable name? Even if I tricked my way around the pattern using it on the needed scope as shown here its not assigned.
Is the above first example the standard approach and only way to do it?