c# - 类型有限的字典

标签 c#

首先,请原谅我的问题的相当有趣的名称。我不是母语人士,用这几个字表达我的想法花了 10 分钟。

我想做的是在 C# 中创建一个字典,允许值是 intstringbool。我首先想到的是使用泛型,但据我所知,我只能将一种类型定义为可能的值类型,而不是“成为其中之一”。使用 object 也是可能的,但装箱似乎是一种性能 killer 。

有什么办法吗?

这是我想到的示例:

Dictionary<string, (string, int, bool)> foo = new Dictionary<string, (string, int, bool)>();
foo.Add("key1", "Hello, World!"); //Correct - Value is a string
foo.Add("key2", 37); //Correct - Value is an int
foo.Add("key3", true); //Correct - Value is a boolean
foo.Add("key4", new Foobar()); //Compiler error - Value is a Foobar

我的最终目标是为其他开发人员提供一个库。此功能应该使他们能够在运行时定义“变量”并为他们提供类型。

Edit://Firefox' about:config 页面与我想要实现的目标非常接近

最佳答案

为什么不创建一个全新的类来实现 IDictionary 并将字典用作私有(private)变量。

然后,在添加方法中,您可以提供自己的逻辑并相应地失败

示例代码

public class MyDic : IDictionary<object, object>
{
    private Dictionary<object, object> privateDic= new Dictionary<object,object>();


    public void Add(object key, object value)
    {
        if (value.GetType() == typeof(string))
            throw new ArgumentException();
        privateDic.Add(key, value);
    }
    //Rest of the interface follows
}

关于c# - 类型有限的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688493/

相关文章:

c# - 有效文本的正则表达式

c# - 获取点击控件的点

c# - 保存更新模型后删除实体注释

c# - 动态 Linq 谓词在 C# MongoDB 驱动程序中引发 "Unsupported Filter"错误

c# - SCRIPT5009 : 'JSON' is undefined in IE 10 The value of the property '$' is null or undefined, 不是函数对象

c# - IP 摄像机的 ONVIF 应用程序开发

c# - 在滚动查看器中将所选项目居中

java - 如何在 Xamarin.Android 中实现 RewardedAdLoadCallback?

c# - 从嵌套的 ToolStripMenuItem 检索时,ContextMenuStrip.Owner 属性为 null

c# - 尝试在非 HttpClient 套接字上进行操作