雖然肯定不「官方」,你可以使用可選命名在構造參數或單獨的工廠/助洗劑的方法:
public class MyClass
{
public string x { get; private set; }
public MyClass(Func<string> x = null)
{
if (x != null)
this.x = x();
}
}
與像用法:
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"
所以,這不是你問的確切語法,但八九不離十,並跳過了LINQ的怪事。
那就是說,我不是就像吧。只是提供它作爲思考的食物。 :)
編輯:我想我會添加一個工廠方法的風格,因爲它是合理的,你正在使用此上,你不能(或不願)改變其構造函數的類:
public static class MyFactory
{
public static MyClass CreateMyClass(Func<string> x = null)
{
var myClass = new MyClass()
if (x != null)
myClass.x = x();
return myClass;
}
}
類似用途(只是調用一個工廠方法代替):
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";
}
);
編輯:哎,而我們在這。爲什麼不走出最後一步,並與一個單獨的建設者和濫用隱式運營商!
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;
}
}
有了這樣的用法:
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";
}
};
所以,現在的語法相同,除了你必須明確地類型,而不是使用var
您的實例。
如果它太長,把它放在一個函數? –
'有什麼其他的方法可以做同樣的事情?'你在做什麼?該物業在哪裏? – I4V
我不會在select語句中使用返回值(Plus基礎數學陳述你是一個苦澀的老頭) – Sayse