高大的春卷 · Oracle存储过程传入List<ob ...· 5 小时前 · |
爱搭讪的蚂蚁 · Oracle存储过程入参传入List集合的小 ...· 5 小时前 · |
腼腆的火柴 · 使用ZipFile.CreateFromDi ...· 5 小时前 · |
豁达的小摩托 · 利用C#进行文件夹压缩(ZipFile.Cr ...· 5 小时前 · |
忐忑的豆芽 · ZipFile.CreateFromDire ...· 5 小时前 · |
犯傻的手链 · 加速Python循环的12种方法,最高可以提 ...· 4 月前 · |
重情义的椰子 · 袁创:文本编辑器中文字断行及排版算法研究 ...· 6 月前 · |
睡不着的盒饭 · change this try to a ...· 7 月前 · |
才高八斗的骆驼 · c#同时播放多个内嵌资源声音问题_百度知道· 1 年前 · |
成熟的沙滩裤 · linux获取文件创建时间 api-掘金· 1 年前 · |
我需要某种方式来存储键/值对,其中值可以是不同的类型。
所以我喜欢这样做:
int i = 12;
string s = "test";
double x = 24.1;
Storage.Add("age", i);
Storage.Add("name", s);
Storage.Add("bmi", x);
然后使用以下命令检索值:
int a = Storage.Get("age");
string b = Storage.Get("name");
double c = Storage.Get("bmi");
这样的存储应该是什么样子的?谢谢,埃里克
嗯,你可以在C# 4/ .NET 4中使用
Dictionary<string, dynamic>
--但是除此之外,你不能用显示的代码来做这件事,因为没有可以隐式转换为
int
、
string
和
double
的类型。(您可以编写自己的类型,但必须单独列出每种类型。)
你可以使用
Dictionary<string, object>
,但是你需要对结果进行转换:
int a = (int) Storage.Get("age");
string b = (string) Storage.Get("name");
double c = (double) Storage.Get("bmi");
或者,您可以使
Get
方法成为泛型:
int a = Storage.Get<int>("age");
// etc
为什么不使用:
Dictionary<string, object>
您可以创建一个扩展方法,以便在获取它们时对其进行转换:
public static class DictionaryExcetions
public static T Get<T>(this Dictionary<string, object> instance, string name)
return (T)instance[name];
var age = dictionary.Get<int>("age");
Dictionary<string, object>
您可以使用
Dictionary<string,object>
,然后您可以在其中放入任何您想要的内容。但是,当您将结果转换为正确的类型时,您必须将它们转换为正确的类型。
但是,看一下您的示例,您可能想要考虑存储数据的简单类是否更符合您的需要,并允许更好的类型安全性。这取决于您在类中放入的内容是否有限,或者您是否确实需要潜在的无限/未知的字典存储。
字典显然是最快的解决方案。
另一种方法是存储自定义类,您可以在其中存储实际值和有关其类型的信息
假设您不需要强类型的数据集合,那么我认为
HashTable
将适合您的情况。您也可以为此创建一个Extention方法,就像为Dictionary实现建议的另一个帖子一样。
例如。
public static class StorageExtentions
public static T Get<T>(this Hashtable table, object key)
return (T) table[key];
}
然后,您的代码将如下所示:
int i = 12;
string s = "test";
double x = 24.1;
Hashtable Storage = new Hashtable();
睡不着的盒饭 · change this try to a try-with-resources sonar java source not set assuming 7 or greater-掘金 7 月前 |
才高八斗的骆驼 · c#同时播放多个内嵌资源声音问题_百度知道 1 年前 |
成熟的沙滩裤 · linux获取文件创建时间 api-掘金 1 年前 |