1

Excel からデータを読み取り、実行するイベントを決定します。

event はどちらも自分で作成したクラスです (ログインとログアウト)

読み取った値が 1 の場合、ログインを実行します

読み取った値が 2 の場合、ログアウトを実行します

私はスイッチを使用していますが、上司は Java でハッシュマップのようなものを使用する必要があると言っています。

Java では、次のようなコードを記述できます。

table.Add( "one", login.class );

では、C#を使用してクラスをハッシュテーブルに追加するにはどうすればよいですか?

どうすれば値を読み取ってハッシュテーブルのクラスメソッドを呼び出すことができますか?

4

3 に答える 3

5

デリゲートを使用できます。たとえば、次のメソッドがあるとします。

public void Login() {
    // ...
}

public void Logout() {
    // ...
}

これを使用できますDictionary

Dictionary<string, Action> actions = new Dictionary<string, Action>() {
    {"Login", Login},
    {"Logout", Logout}
};

次に、次のように呼び出します。

actions[myAction]();

もちろん、キーが存在することを確認する必要があります。デリゲートは、通常のメソッドを呼び出すのとほとんど同じ方法で呼び出すことができます。引数または戻り値がある場合は、適切なAction<T1, T2...>またはを使用してFunc<T1, T2... TOut>ください。

于 2012-04-18T01:19:32.450 に答える
1

実際、C# コンパイラはswitch文字列をハッシュテーブルとして実装するため、手動で実行しても何も得られない可能性があります。

この投稿を参照してください。

あなたは上司にあなたがすでにそれをやったと言うことさえできます、そしてあなたは嘘をつかないでしょう;)

于 2012-04-18T01:35:07.357 に答える
0

次のコードを使用するとDoSomething、Dictionary インデックスから呼び出し可能なメソッドをオブジェクトに実装できます。

public interface ICallable
{
    void Execute();
}

public class Login : ICallable
{
    // Implement ICallable.Execute method
    public void Execute()
    {
        // Do something related to Login.
    }
}

public class Logout : ICallable
{
    // Implement ICallable.Execute method
    public void Execute()
    {
        // Do something related to Logout
    }
}

public class AD
{
    Dictionary<string, ICallable> Actions = new Dictionary<int, ICallable>
    {
        { "Login", new Login() }
        { "Logout", new Logout() }
    }

    public void Do(string command)
    {
        Actions[command].Execute();
    }
}

使用例

AD.Do("Login"); // Calls `Execute()` method in `Login` instance.
于 2012-04-18T03:05:30.450 に答える