C#:属性映射

时间:2011-09-29 14:57:48

标签: c#

C#中是否有一个PropertiesMap,它暴露了GetDouble(string),GetDateTime(string)等方法。?

IDictionary<string,string>强制用户负责类型转换。

5 个答案:

答案 0 :(得分:2)

是的,有ExpandoObject,语法非常简洁。

dynamic propertyMap = new ExpandoObject();
var item = propertyMap as IDictionary<String, object>;

item["A"] = DateTime.Now;
item["B"] = "New val 2";
propertyMap.C = 1234

Console.WriteLine(propertyMap.A);
Console.WriteLine(propertyMap.B);    
Console.WriteLine(propertyMap.C);

答案 1 :(得分:1)

您可以使用Convert,它可以处理您需要的大量转化。

Convert.ToDateTime(string value) //about 7 overloads
Convert.ToInt32(string value)
Convert.ToDouble(string value)

它有很多转换选项,有很多重载。

答案 2 :(得分:1)

您可以使用Dictionary类并为您想拥有Get方法的所有数据类型添加扩展方法,或者添加一个通用的Get方法并使用它:

public static class Extensions
{
    public static T Get<T>(this Dictionary<string, object> dictionary, string key)
    {
        if (dictionary == null)
        {
            throw new ArgumentNullException("dictionary");
        }

        if (key == null)
        {
            throw new ArgumentNullException("key");
        }

        return (T)dictionary[key];
    }
}

您甚至可以为Dictionary<string, object>类型创建别名:

using PropertiesMap = System.Collections.Generic.Dictionary<string, object>;

使用这个:

PropertiesMap pm = new PropertiesMap { { "1", 1 }, { "2", DateTime.Now }};
Console.WriteLine(pm.Get<int>("1"));
Console.WriteLine(pm.Get<DateTime>("2"));

答案 3 :(得分:0)

您可以使用Convert.ToXXX吗?不确定您的问题与IDictionary<string, string>虽然...

有什么关系

请参阅此MSDN页面。

答案 4 :(得分:0)

Dictionary<string,object>可以存储任何内容而无需转换。但是,在检索值时必须进行强制转换:

var dict = new Dictionary<string,object>();
dict.Add("Name", "John");
dict.Add("Age", 20);
...
string name = (string)dict["Name"];
int age = (int)dict["Age"];