This is probably a simple C# question for somebody, who has been working in it for long enough. Can I do something like this
class MyClass
{
public string Name { get; set; }
public void SetName(string name)
{
Name = name;
}
}
Then inside some other class I have something like this
MyClass myClass;
public MyClass MyProperty { get { return myClass ?? new MyClass().SetName("myName"); } }
So when I call Myproperty if it is null I want to just create a new one with a property set this way, I cannot use constructor on MyClass, instead I have few overloaded methods, that I call when MyClass is constructed.
This works
public MyClass MyProperty
{
get
{
myClass = myClass ?? new MyClass();
myClass.SetName("myName");
return myClass;
}
}
But I’m just curious why this does not, what is the difference because I don’t see any
public MyClass MyProperty
{
get
{
return myClass ?? new MyClass().SetName("myName");
}
}
EDIT:
I just did this instead based on the opinions
public MyClass MyProperty
{
get
{
if (myClass == null)
{
myClass = new MyClass();
myClass.SetName("myName);
}
return repository;
}
}
Another approach is to change MyClass to
class MyClass
{
public string Name { get; set; }
public MyClass SetName(string name)
{
Name = name;
return this;
}
}
and then use it like this
MyClass myClass;
public MyClass MyProperty
{
get
{
return myClass ?? new MyClass().SetName("myName");
}
}
And Im going with it :0 Thanks for all answers :)
Return type of
SetNameis void.So
new MyClass().SetName("myName")isvoid, not instance ofMyClass.UPDATE
To achieve your desired behaviour, you can change SetName to return
this, and rewrite yourMyPropertysetter for example, toreturn myClass ?? new MyClass().SetName("myName");