確かに「公式」ではありませんが、コンストラクターまたは別のファクトリー/ビルダーメソッドでオプションの名前付きパラメーターを使用できます。
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