字典数量有限

Mec*_*MK1 6 c#

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

我想要做的是在C#中创建一个字典,允许值为a int,a string或a bool.我首先想到的是使用泛型,但据我所知,我只能将一种类型定义为可能的值类型,而不是"成为其中之一".使用object也是可能的,但拳击似乎是一个非常性能杀手.

有没有办法做到这一点?

以下是我想到的一个例子:

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
Run Code Online (Sandbox Code Playgroud)

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

编辑:// Firefox'关于:配置页面有一些非常接近我想要实现的东西

Lui*_*ipe 6

为什么不创建一个实现IDictionary的新类,并使用Dictionary作为私有变量.

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

示例代码

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
}
Run Code Online (Sandbox Code Playgroud)

  • 根据此代码的更改量,您可以为`Add`方法提供3个单独的重载,分别接受类型为`int`,`string`或`bool`的`value`.通过这样做,在编译时检查类型正确性,而不是在运行时. (3认同)