Choć z pewnością nie „oficjalnej”, ty mógłby użycie opcjonalnie nazwie parametry konstruktora lub oddzielny sposób fabryka/budowniczy:
public class MyClass
{
public string x { get; private set; }
public MyClass(Func<string> x = null)
{
if (x != null)
this.x = x();
}
}
z wykorzystaniem takich jak:
var myClass = new MyClass(
x:() =>
{
//Do stuff..
if (2 + 2 == 5)
return "I like cookies";
else if (2 + 2 == 3)
return "I like muffins";
//More conditions...
else
return "I'm a bitter old man";
}
);
Console.WriteLine(myClass.x); //"I'm a bitter old man"
Tak, to nie jest składnia dokładny pan prosi o, ale dość blisko i pomija weirdness LINQ.
To powiedziawszy, ja nie jak go. Po prostu oferuję to jako pokarm do przemyśleń. :)
EDIT: Pomyślałem, że dodać styl metoda fabryki, ponieważ jest prawdopodobne, że używasz tego na klasy, które nie mogą (lub nie chcą) zmienić jego konstruktora:
public static class MyFactory
{
public static MyClass CreateMyClass(Func<string> x = null)
{
var myClass = new MyClass()
if (x != null)
myClass.x = x();
return myClass;
}
}
z podobnym użytkowania (tylko wywołanie metody fabryki zamiast):
var myClass = MyFactory.CreateMyClass(
x:() =>
{
//Do stuff..
if (2 + 2 == 5)
return "I like cookies";
else if (2 + 2 == 3)
return "I like muffins";
//More conditions...
else
return "I'm a bitter old man";
}
);
EDIT: I hej, a my jesteśmy w nim. Dlaczego nie zejść z głębokiego końca i zrobić to z oddzielnym budowniczym i niejawnymi operatorami!
public class MyClassBuilder
{
public Func<string> x { get; set; }
public static implicit operator MyClass(MyClassBuilder builder)
{
var myClass = new MyClass();
if (builder.x != null)
myClass.x = builder.x();
return myClass;
}
}
z wykorzystaniem takich jak:
MyClass myClass = new MyClassBuilder
{
x =() =>
{
//Do stuff..
if (2 + 2 == 5)
return "I like cookies";
else if (2 + 2 == 3)
return "I like muffins";
//More conditions...
else
return "I'm a bitter old man";
}
};
Więc teraz składnia jest identyczne, wyjątkiem trzeba jawnie wpisać instancji zamiast korzystania var
.
Jeśli jest zbyt długi, umieść go w funkcji? –
"Jakie są inne sposoby robienia tego samego?" Co próbujesz zrobić? Gdzie jest nieruchomość? – I4V
Nie użyłbym zwrotu w instrukcji select na początek (Plus basic mathematics stwierdza, że jesteś zgorzkniałym staruszkiem). – Sayse