首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C#中创建包含不同类型的字典

如何在C#中创建包含不同类型的字典
EN

Stack Overflow用户
提问于 2010-11-05 19:15:53
回答 6查看 75.4K关注 0票数 59

我需要某种方式来存储键/值对,其中值可以是不同的类型。

所以我喜欢这样做:

代码语言:javascript
运行
复制
 int i = 12;
 string s = "test";
 double x = 24.1;

 Storage.Add("age", i);
 Storage.Add("name", s);
 Storage.Add("bmi", x);

然后使用以下命令检索值:

代码语言:javascript
运行
复制
 int a = Storage.Get("age");
 string b = Storage.Get("name");
 double c = Storage.Get("bmi");

这样的存储应该是什么样子的?谢谢,埃里克

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-05 19:18:46

嗯,你可以在C# 4/ .NET 4中使用Dictionary<string, dynamic> --但是除此之外,你不能用显示的代码来做这件事,因为没有可以隐式转换为intstringdouble的类型。(您可以编写自己的类型,但必须单独列出每种类型。)

你可以使用Dictionary<string, object>,但是你需要对结果进行转换:

代码语言:javascript
运行
复制
int a = (int) Storage.Get("age");
string b = (string) Storage.Get("name");
double c = (double) Storage.Get("bmi");

或者,您可以使Get方法成为泛型:

代码语言:javascript
运行
复制
int a = Storage.Get<int>("age");
// etc
票数 85
EN

Stack Overflow用户

发布于 2010-11-05 19:18:50

为什么不使用:

代码语言:javascript
运行
复制
Dictionary<string, object>

您可以创建一个扩展方法,以便在获取它们时对其进行转换:

代码语言:javascript
运行
复制
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");
票数 9
EN

Stack Overflow用户

发布于 2010-11-05 19:55:13

假设您不需要强类型的数据集合,那么我认为HashTable将适合您的情况。您也可以为此创建一个Extention方法,就像为Dictionary实现建议的另一个帖子一样。

例如。

代码语言:javascript
运行
复制
public static class StorageExtentions
{
    public static T Get<T>(this Hashtable table, object key)
    {
        return (T) table[key];
    }
}

然后,您的代码将如下所示:

代码语言:javascript
运行
复制
int i = 12;
string s = "test";
double x = 24.1;
Hashtable Storage = new Hashtable();
Storage.Add("age", i);
Storage.Add("name", s);
Storage.Add("bmi", x);
int a = Storage.Get<int>("age");
string b = Storage.Get<string>("name");
double c = Storage.Get<double>("bmi");
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4105361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档