C#中是否有一个PropertiesMap,它暴露了GetDouble(string),GetDateTime(string)等方法。?
IDictionary<string,string>
强制用户负责类型转换。
答案 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"];