异构词典,但是类型化?

2024-03-29

这更多的是一个学术探究而不是一个实际问题。是否有任何语言或框架功能可以或将来允许异构类型字典,例如

myDict.Add("Name", "Bill"); 
myDict.Add("Height", 1.2); 

其中 myDict 现在不包含两个object类型作为值,但是一个string和一个double?然后我就可以找回我的double with

double dbl = myDict["Height"];

并期望抛出双精度或异常?

请注意:名称和高度值不一定是同一对象。


如果您有一个带有 Add 和 Get 方法的通用重载的自定义集合,那么您能够执行此操作的唯一方法是。但这意味着您在读取密钥时可能会要求错误的类型,因此与调用 Get 方法时自己进行强制转换相比,它不会给您带来太多(如果有的话)。

但是,如果您可以将泛型类型推入键中,那么就可以工作。类似的东西(此处未经测试的代码)

sealed class MyDictionaryKey<T>
{
}

class MyDictionary
{
    private Dictionary<object, object> dictionary = new Dictionary<object, object>();

    public void Add<T>(MyDictionaryKey<T> key, T value)
    {
        dictionary.Add(key, value);
    }

    public bool TryGetValue<T>(MyDictionaryKey<T> key, out T value)
    {
      object objValue;
      if (dictionary.TryGetValue(key, out objValue))
      {
        value = (T)objValue;
        return true;
      }
      value = default(T);
      return false;
    }

    public T Get<T>(MyDictionaryKey<T> key)
    {
      T value;
      if (!TryGetValue(key, out value))
         throw new KeyNotFoundException();
      return value;
    }
}

然后你可以定义你的键,例如:

static readonly MyDictionaryKey<string> NameKey = new MyDictionaryKey<string>();
static readonly MyDictionaryKey<double> HeightKey = new MyDictionaryKey<double>();

并像这样使用它

var myDict = new MyDictionary();
myDict.Add(NameKey, "Bill"); // this will take a string
myDict.Add(HeightKey , 1.2); // this will take a double

string name = myDict.Get(NameKey); // will return a string
double height = myDict.Get(HeightKey); // will return a double
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异构词典,但是类型化? 的相关文章

  • 使用 JSON.NET 反序列化一些 JSON

    我对 JSON 非常陌生 我需要解析 API 提供的一些内容 谷歌快速搜索出现了JSON NET http james newtonking com pages json net aspx 所以我现在尝试使用它将此 JSON 解析为列表对象
  • 新的 Windows 应用程序 - 什么语言?

    我们目前正处于开发 Windows 桌面应用程序的前期阶段 但当听到有关 Windows 8 Silverlight WPF Jupiter 的所有最新讨论时 我不知道该相信什么了 现在用WPF启动一个新项目是不是有问题 我应该切换到 Si
  • 在 Orchard 中设置唯一的主体类和 ID

    有没有办法在 Orchard 中为每页设置唯一的正文类和 ID 我希望能够在 编辑页面 部分控制这些 例如 主页的正文 ID 为 home 关于页面的正文 ID 为 about 等 并且 如果 about 页面下有子页面 这些页面将具有 a
  • C# 中将一个字符串拆分为另一个字符串

    我一直在使用Split 分割字符串的方法 但这似乎仅在您按字符分割字符串时才有效 有没有办法分割一个string 另一个字符串是按参数分割的 我尝试将拆分器转换为字符数组 但没有成功 换句话说 我想分割string THExxQUICKxx
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • 无法通过 HTTPS 调用 Web 服务

    我正在开发一个 Net 应用程序 它与 Web 服务通信以获取一些数据 Net 应用程序和 Web 服务之间的连接是通过 HTTPS 完成的 当我从 Net 应用程序调用 Web 服务时 我得到以下堆栈跟踪 System Net WebEx
  • 日期时间的自定义 JavaScriptConverter?

    我有一个对象 它有一个 DateTime 属性 我想通过 AJAX JSON 将该对象从 ashx 处理程序传递回网页 我不想使用第 3 方控件 当我这样做时 new JavaScriptSerializer Serialize DateT
  • 为什么使用 HTTP 动词?

    因为动词的目标是像 server domain getallrecords 或 server domain delete1record 或类似的 URL 而getallrecords delete1record都是专门为特定目的而设计的 为
  • 如何提取括号(圆括号)之间的文本?

    我有一根绳子User name sales 我想提取括号之间的文本 我该怎么做 我怀疑子字符串 但我无法弄清楚如何阅读 直到右括号 文本的长度会有所不同 如果您希望远离正则表达式 我能想到的最简单的方法是 string input User
  • Phantom JS 50% 的时间失败

    我搜索一个文本框 然后尝试用字符串填充它 这是代码 var fname driver FindElement By Name iFirstName 50 if fname null do System Threading Thread Sl
  • C#、Visual Basic.NET 和托管 C++ 之间的字符串文字有何区别?

    我指的是在代码中编写字符串的语法 包括多行字符串和逐字字符串 上下文 我正在开发一个扫描代码的工具 确定令牌何时位于字符串内非常重要 Thanks 这是语言之间的快速细分 托管 C 以与普通 C C 或 C 类似的方式支持字符串文字 也就是
  • 编译时和运行时转换 C#

    我想知道为什么 C 中的某些强制转换会在编译时进行检查 而在其他情况下则将责任转嫁给 CLR 如上所述 两者都是不正确的 但处理方式不同 class Base class Derived Base class Other static vo
  • 生成的表的行跨度导致额外的单元格

    HTML table border 1 cellspacing 1 width 100 thead tr td class csstextheader width 70px td td class csstextheader width 7
  • List.Clear() 在 C# 中是如何实现的?

    我假设它使用数组来实现 List 怎么List Clear 实施的 它实际上清理了数组还是只是为此列表创建了一个新数组 public class List private Array array public void Clear1 arr
  • 如何按字段对列表进行排序

    美好的一天 4 你们大家 我有一个对象列表 我的对象喜欢 Product iPhone Category SmartPhone Product HP Category PC Product HTC Category SmartPhone 我
  • WCF - 如何增加消息大小配额

    我有一个 WCF 服务 它将 1000 条记录从数据库返回给客户端 我有一个 ASP NET WCF 客户端 我在 asp net Web 应用程序项目中添加了服务引用来使用 WCF 当我运行客户端应用程序时 我收到以下消息 传入消息的最大
  • 作为服务运行时未找到 PowerShell 模块

    我有一个项目 我将 Office 365 许可证分配给用户 有一个 Web 项目允许管理员查看可用许可证并为用户选择许可证 在后台 有一项服务每 15 分钟执行一次实际的许可证分配 以及许多其他任务 我们不直接分配许可证的原因是用户可能尚未
  • C# 事务中的事务

    我正在使用 C 将发票的平面文件导入到数据库中 如果遇到问题 我将使用 TransactionScope 回滚整个操作 这是一个棘手的输入文件 因为一行不一定等于一条记录 它还包括链接记录 发票将包含标题行 行项目和总计行 有些发票需要跳过
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js

随机推荐

  • 如何访问 WPF Canvas 类的子级?

    如何访问 WPF Canvas 类的子级 这是一门很酷的课程 我喜欢你添加孩子的方式 但是一旦它们存在 您如何查看它们以阅读它们的状态和内容 我知道如果将孩子放在 XAML 中会很容易 但是 如果您在运行时动态地将子项添加到画布中该怎么办
  • CSS 边框混乱

    只是困惑为什么当悬停在 border bottom 时 边框与内容配合得很好 但当更改为 border top 时 它会向下推内容 这是代码 ul list style type none margin 0 padding 0 width
  • 有什么方法可以判断用户的python环境是否是anaconda

    我正在分发一个内部 python 库 如果用户在运行此文件时使用 anaconda 则将自动更新库的依赖项 这是应要求提供的 如果由我决定 我会让用户控制他们自己的软件包 到目前为止 我想出了类似的东西 def user has conda
  • Ruby、Rails 和两个日期之间的差异

    我会让这个例子说明一切 ruby 1 9 2 p0 gt DateTime now gt Mon 14 Feb 2011 20 02 49 0100 ruby 1 9 2 p0 gt User first created at gt Tue
  • 如何在Wordpress中通过父页面标题获取页面的所有子页面?

    例子 About technical medical historical geographical political 如何创建这样的函数 function get child pages by parent title title th
  • 点源变量 VS 全局变量

    我有两种从单独的脚本文件引用脚本变量的方法 以下是两个基本示例 1 点源变量 ps1 Source source Destination dest 执行 ps1 Variables ps1 Copy Item Path Source Des
  • 在 Pandas 中,如何根据列的值对多索引的一个级别进行排序,同时保持另一级别的分组

    我现在正在大学学习数据挖掘课程 但我有点陷入多索引排序问题 实际数据涉及大约 100 万条电影评论 我试图根据美国邮政编码进行分析 但为了测试如何做我想做的事 我一直在使用一个小得多的数据集 其中包含 250 个随机生成的数据集我使用的是年
  • 结构伪类和属性选择器不能一起工作

    我有这个 HTML 代码 div class field div
  • 如何在不使用 R 中的 for 循环的情况下编写此指标矩阵

    我有一个由一系列数字给出的因子向量 这些因素也可以在单独的数据集中找到 称为test set and train set 以下代码的作用是查找数据集中的因子在因子向量中匹配的位置 并将 1 放在矩阵的位置 乘以这个矩阵compound te
  • 在持续重构的项目中使用 git/mercurial?

    我试图了解我是否真的有使用 git mercurial 的情况 我工作的项目是java和c 项目 通常有5 20人致力于 一个共同的目标 发布 大多数开发人员都是专业开发人员 重构代码一直 所以典型的linux内核有大量的 单独文件中相对独
  • 有没有一种简单的方法来获取时间戳==昨天的数据?

    有没有一种简单的方法来获取时间戳 昨天的数据 我只想要昨天的数据 SELECT COUNT t0 user id AS t0 qt AC5uO9oi FROM something here AS t0 WHERE t0 event type
  • 了解“中位数的中位数”算法

    我想了解以下示例的 中位数 算法 我们有 45 个不同的数字 分为 9 组 每组 5 个元素 48 43 38 33 28 23 18 13 8 49 44 39 34 29 24 19 14 9 50 45 40 35 30 25 20
  • 如何安装uWebSockets?

    我通过 VMware 在 Windows 10 上运行 ubuntu 因为Udacity课程需要uWebSockets来运行模拟器 这是班级安装它的步骤 run chmod a x install linux sh 这是install li
  • 在 For 循环内创建线程 C++

    我一直在 for 循环内尝试多线程 基本代码块将是这样的 void function int a string b MyClass Obj MyClass2 Obj2 execution part void anotherclass Mem
  • C# 类多态

    为什么下面代码的结果是 Class AA级A级 public class A public virtual void f Console WriteLine Class A public class B A public virtual v
  • 如何保护网站免受 DoS 攻击

    保护站点免受 DoS 攻击的最佳方法是什么 知道流行的网站 服务如何处理这个问题吗 应用程序 操作系统 网络 托管级别的工具 服务是什么 如果有人能分享他们的真实经历 那就太好了 Thanks 您确定是说 DoS 不是注入吗 在 Web 编
  • Materialise css 图标不显示在 Safari 浏览器中

    我注意到materialized CSS图标不显示在Safari v5 1 7 7534 57 2 关于这个主题进行了很多搜索 但没有任何有关 safari 的浏览器兼容性的文档已列出 谁能告诉我这是否是一个需要修复的错误 或者是否有其他方
  • Python 正则表达式 findall 带变量

    我正在尝试使用 re findall 与后视和前瞻来提取数据 当我不使用 raw input 变量时 正则表达式工作正常 但我需要用户能够输入各种不同的搜索词 这是当前的代码 me re findall r lt variable vari
  • Angular Google 地图 - 自动设置“中心”和“缩放”以适应所有标记

    我的 Google 地图中有一个动态生成的标记列表 我希望地图的中心成为所有标记的中心 并缩小到足以使所有标记都在视图中 在计算地图中心方面 也许可以通过迭代所有的纬度和经度并找到中心点来实现 但是 我无法找出计算缩放比例的最佳方法 这有可
  • 异构词典,但是类型化?

    这更多的是一个学术探究而不是一个实际问题 是否有任何语言或框架功能可以或将来允许异构类型字典 例如 myDict Add Name Bill myDict Add Height 1 2 其中 myDict 现在不包含两个object类型作为