また、名前付き引数を強制する方法も探しました。オプションのパラメーターは危険な場合があります。特に、同じ型のパラメーターが複数ある場合は危険です。ほとんどの場合、オーバーロードはより安全な解決策ですが、多くの引数の組み合わせを取ることができるメソッドがある場合があるため、あらゆる可能性を考慮して 20 個のオーバーロードを作成するのはやり過ぎです。
引数に常に名前を付けることが最も重要な極端な状況では、コンストラクターを定義せずに引数クラスを作成します。あなたの場合、これを行うことができます:
public class UserRegistrationArguments
{
public string nameFirst { get; set; }
public string nameLast { get; set; }
public string nameMiddle { get; set; }
public string email { get; set; }
}
次のように呼び出します。
RegisterUser(new UserRegistrationArguments { nameFirst = "Bob", nameLast = "Slob" });
次のように単純化することもできます。
public class UserRegistrationArguments
{
public string nameMiddle { get; set; }
public string email { get; set; }
}
int RegisterUser(string nameFirst, string nameLast, UserRegistrationArguments args = null)
...そしてこれを行います:
RegisterUser("Bob", "Slob", new UserRegistrationArguments { nameMiddle = "Teh" });
このように、オプション パラメータは 1 つしかなく、それはオプション パラメータ用です。
編集: OPを正しく読んでいない可能性があります。オプションの引数を使用していませんか? そうでない場合、この回答はおそらく役に立ちません。