如何将函数OR字符串存储为字典中的值(C#)

时间:2010-12-02 20:22:09

标签: c#

我需要创建一个字典 key是字符串和 值是(委托函数或字符串)。

因为,我想实现回调机制,其中有时我需要函数进行更多处理,返回字符串,有时只需要修复字符串。

有没有办法在C#中做到这一点?

谢谢

6 个答案:

答案 0 :(得分:7)

我认为最简单的方法是创建Dictionary<string, Func<string>>。这显然可以保留回拨案例。对于非回调情况,您可以创建一个简单的lambda来返回硬编码值。

private Dictionary<string, Func<string>> m_map;
public void AddValue(string key, string value) {
  m_map[key] = () => value;
}
public void AddValue(string key, Func<string> value) {
  m_map[key] = value;
}

答案 1 :(得分:6)

如果您需要固定字符串,则可以创建一个返回固定字符串的函数。然后在这两种情况下,您只需要处理返回字符串的函数。

答案 2 :(得分:3)

Dictionary<string, object>可以解决问题,您只需将结果转换为stringFunc<string>

答案 3 :(得分:2)

将字典的值声明为对象。

答案 4 :(得分:1)

使用字符串属性创建对象。该对象具有返回字符串或调用函数以获取基于其构造函数的字符串的智能。然后把它们放在你的字典词典

public class MyCoolClass
{
    public MyCoolClass(Func<string> getString)
    {
        m_getString = getString;
    }
    public MyCoolClass(string s)
    {
        m_string = s;
    }
    public string GetString()
    {
        return m_string ?? getString();
    }
    private string m_string;
    private Func<string> m_getString;
}

答案 5 :(得分:0)

使用词典的示例

static void Main()
{        
    var dic = new Dictionary<string, Func<string>>();

    dic.Add("A", () => "Hello World");  // Constant lambda
    dic.Add("B", ConstructString);      // Calculated
    dic.Add("C", delegate { return string.Empty; });    // Anonymous delegate
}

static string ConstructString()
{
    return DateTime.Now.ToString();
}