虽然肯定不是“官方的”,但您可以在构造函数或单独的工厂/构建器方法中使用可选的命名参数:
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
.