私は多次元配列の変換を行うスクリプト内に、transpose、shift、swapColumn..etcなどの複数のメソッドを持っています。これらの変更を取り消したいそれらのメソッドをスタックに格納し、それらの逆を取ることによって実現される。 リストにメソッドを格納するにはどうすればよいでしょうか? これまでのところ、私は2つのappraochesを思いついた。 1文字のスタックを格納する。各文字は、メソッドの呼び出しを表す。例えば、t-> transopse。 2-変換と呼ばれる抽象クラスを構築し、私のスタックは、すべての異なる方法に一般的なスタックまたはリストにメソッドを格納する方法C#
答えて
を保存することができるようにあなたがFunc
かAction
を使用してList
でメソッドを保存することができますサブクラスとしての私のすべてのメソッドを作る:
List<Func<T1, T2, TReturn>>
TReturn MyFunction(T1 input1, T2 input2)
または::
List<Action<T1, T2>>
0に相当します等価である
:すべてのメソッドが共通の署名を持っていない場合
void MyFunction(T1 input1, T2 input2)
しかし、私の関数が型を返さなかった場合(void)? –
代わりにActionを使用できますか? –
そして、 'TReturn'を' void'に置き換えてください。 –
あなたはオプションのカップルを持っています。 object
の汎用スタックを作成し、そこにすべてをプッシュすると、ポップ時にシグネチャと可能なシグネチャを比較し、それに応じてキャストできます。
他の構造にメソッド全体をカプセル化し、そこにスタックを作成するか、リフレクションを使用してパラメータ型と戻り値の型を取得し、必要な値また、List
のobject
の構造体に再度格納してキャストバックすることもできます)。リフレクションを使用する場合は、関数オブジェクト自体を格納する必要はなく、クラス名とメソッド名の文字列を使用するだけで済みません。
メソッドをオブジェクトとして扱いたいのであれば、それらをどのように呼び出しますか?例えば、オブジェクトtemp = stack.pop()... –
@RaedTabaniあなたはそれらをチェックすることができます(例えば、 'if(temp typeof yourPossibleFunctionType)'を使用して)それらを関数型にキャストし、それを普通に呼び出します。もちろん、可能な型が多くある場合は、これは非効率的で、2番目の段落が良いでしょう。 –
shad0wkの答えへの可能な改善は、あなたがあなたの第一のアイデアと一緒に行きたい場合には、多分
Dictionary<string, List<Func<T1, T2, TReturn>>>
あなたが簡単にあなたの方法として、アクセスリストでその逆をペアにすることができ、そのようにすることです同じキー。
- 1. カスタマーインボイスフォーム。一般的なリスト。 C#
- 2. SharedPreferencesにスタックを格納する方法
- 3. C#一般的なリストでEqualsメソッドを使用できない
- 4. ASP.NETまたはC#の一般的な拡張メソッド(.Net 3.5)
- 5. メソッドを静的変数に格納する方法は?
- 6. 一般的な拡張メソッドC#
- 7. 乱数をリストに格納する方法は? C++
- 8. C#でオブジェクトの参照をリストに格納する方法は?
- 9. 一般的な静的メソッド
- 10. 一般的な単語を数え、結果を行列に格納する方法は?
- 11. htmlファイル(または一般的なファイル)を格納するのに最適なデータベース
- 12. 一般的なオブジェクト内のリストにアクセスする方法
- 13. GDBでスタックに格納された変数を見る方法
- 14. データをJavaのスタックとキューに格納する方法は?
- 15. インクリメント変数を配列またはスタックに格納する方法
- 16. オブジェクトを含むリストをクッキーに格納する方法MVC C#
- 17. JSON配列を動的リスト<?>に格納する方法
- 18. C#クラスのインスタンスをリストに格納する方法
- 19. C#一般的なメソッドのパラメータを作成します。
- 20. 一般的なメソッド配置
- 21. Linq一般的なメソッド
- 22. 一般的なメソッド抽出
- 23. Objective Cはオブジェクト、ヒープまたはスタックをどこに格納しますか
- 24. 一般的な方法と
- 25. C#一般的なリストに追加する際の問題
- 26. 一般的なリスト/ディクショナリ
- 27. スタックは値をCに格納しません
- 28. 一般的に使用されている条件がメソッドにラップされたAzureテーブルの格納域のクエリ
- 29. 動的な一般的なメソッドT
- 30. Cで動的配列に値を格納する方法
これらはすべて共通の署名を持っていますか? Listyに入れることができます –
TaW
共通のシグネチャを持つメソッドはどういう意味ですか?それは戻り値ですか? –
@RaedTabani署名は、すべてのパラメータ型と戻り値の型の組み合わせです。 'int Foo(int x)'と 'int Bar(int y)'は 'T = int'の' T Blah(T val) 'と同じシグネチャを持ちますが、' void Blop(string s) ' –