我在question:中看到了这一点:
在添加到字典之前,编辑类型已知
You could use Dictionary<string, object>, then you'd need to cast the results:
int no = 1;
string str = "world";
Dictionary dict = new Dictionary<string,object>();
dict.add( "intObj" , no );
dict.add( "intObj" , str );
int a = (int) Storage.Get("age"); //everthing was perfect till i see cast .
string b = (string) Storage.Get("name");
double c = (double) Storage.Get("bmi");
问题:如何在返回值之前修改square-Brackets []以转换类型 所以它看起来像这样;
int a = dict["intObject"] ; //we got rid of casting forever
string b = dict["stringObject"] ;
谢谢。
答案 0 :(得分:2)
您无法直接修改索引器。您可以做的是创建一个扩展方法,为您(部分)执行此操作:
public static class DictionaryExtensions
{
public static T Get<T>(this Dictionary<string, object> dictionary, string key)
{
object value = null;
return dictionary.TryGetValue(key, out value) ? (T)value : default(T);
}
}
请注意,这有一些缩短:
如果有人插入带有null
的密钥,那么如果值是值类型,您将在运行时获得强制转换异常。
如果值类型的值不存在,则您将获得每个基元的默认值。请注意,您无法真实地指出密钥是否存在于字典中。
答案 1 :(得分:1)
(在提到.NET 2.0要求之前回答 - 它可能对其他人有用。)
您可以使用Dictionary<string, dynamic>
代替 - 此时表达式dict["stringObject"]
的编译时类型将为dynamic
。然后,对string
类型变量的赋值将在执行时执行转换。
您无法改变Dictionary<string, object>
的行为方式。您将 更改类型参数...不,您不能使用.NET 2.0执行此操作。