私がenumた内容に応じて機能を実行する必要があり、これよりもそれに別の方法がある場合、私は思ったんだけどプログラムがあります。C#アクション/機能一覧
enum FunctionType
{
Addition = 0,
Substraction = 1,
Mutiplication = 2,
Division = 3
}
void ExecuteFunction(FunctionType Function)
{
switch(Function)
{
case FunctionType.Addition: Addition();
break;
case FunctionType.Substraction: Subsctration();
break;
...
default: ...
}
}
(これはコードの私ではありませんが私がやりたいことを表現するだけです)。 このアプローチはうまくいくはずですが、はるかに多くの機能があるとどうなりますか?私は50行のスイッチを持つことを望んでいません。私はそれを簡略化する方法があるかどうかを知りたいので、おそらくこのような何か:
enum FunctionType : Action
{
Addition = new Action(Addition);
Substraction = new Action(Substraction);
....
}
void ExecuteFunction(FunctionType Function)
{
(Action)Function.Invoke();
}
ありませんスイッチが必要とされていると、何が50行が1行に変身することができます。しかし、これは可能ではありません。数値型だけがenumとして受け入れられます。 アクションのList<T>
があると思われますが、実行時に各アクションをリストに追加する必要があります。
編集: ソースコードでこれが行われていますが、実際には理解できません。これは私が得るものです: 彼らはstring
(メソッド名)と、彼らは法に含むカスタムAttribute
作成します。その後、私はこれはそれの名前で呼ばれているのか分からない
[CustomAtrribute("name")]
void Method()
{
}
を、私は私はこれについての情報を見つける方法を知りません。
EDIT2:私がこれをやりたいと思った方法を見つけたら、関数を使ってインターフェイスを追加し、関数内のコードでそのインターフェイスを実装し、Dictionary<Enum, Interface>
を使って呼び出します。私は知らない私は自分の質問に答える必要があれば、とにかく皆のおかげで誰かが私を助けました。
ような何かを行うことができます実行時にメソッド名がすべてenum値の名前と一致する場合は、それを反映させることもできます。 –
'()'を追加するだけでアクションを実行できます。 '.Invoke()'を実行する必要はありません。ちょっとfyi – vrwim
@Jon Skeetたぶん、辞書のことはうまくいきますが、すべてを追加することは良いとは言えません。しかし、巨大なスイッチよりも優れています。すべてのメソッド名をすべての列挙型の名前と一致させることは、新しいものを追加するときには少し危険です。 – null