C#hashtable添加我自己创建的类

时间:2012-04-18 01:12:41

标签: c# hash foreach hashmap hashtable

我从excel读取数据并确定我要执行的事件。

事件都是我自己创建的类(登录和注销)

如果我读取的值= 1,则执行login

如果我读取的值= 2,则执行注销

我使用switch但我的老板说我必须在Java中使用类似hashmap的东西。

在Java中,我可以编写如下代码:

table.Add(“one”,login.class);

那么如何使用c#?

将类添加到哈希表中

如何读取值并在哈希表中调用类方法?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

实际上,C#编译器会在字符串上实现switch作为散列表,所以你不可能通过手动获取任何东西。

请参阅this post

你甚至可以告诉你的老板你已经做过了,你也不会说谎;)

答案 2 :(得分: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.