在运行时获取定义字典的类型的C#方法

3
我想知道在运行时获取定义字典的通用参数的最佳方法是什么。
以以下代码为例:
Dictionary<string, object> dict;

在运行时,我如何找出键是字符串?

2个回答

9

我不确定我是否正确理解了您的问题,但我认为您的意思是这样的:

Dictionary<string, object> dict = new Dictionary<string, object>();
// ...
var args = dict.GetType().GetGenericArguments();
// args[0] will be typeof(string)

谢谢你,你理解了我的问题,第一次表述得不太好。 - MrEdmundo

1
这是一个NUnit测试,用来演示Mehrdad的答案,并且使用一个包含整数作为键和字符串作为值的字典:
        [Test]
        public void testGetPhysicalTypeForGenericDictionary()
        {
            IDictionary<int, string> myDictionary = new Dictionary<int, string>();
            Type [] myTypes = myDictionary.GetType().GetGenericArguments();
            Assert.AreEqual(2, myTypes.Length);
            var varTypes = myDictionary.GetType().GetGenericArguments();
            Assert.AreEqual("Int32", varTypes[0].Name);
            Assert.AreEqual("System.Int32", varTypes[0].FullName);

            Assert.AreEqual("String", varTypes[1].Name);
            Assert.AreEqual("System.String", varTypes[1].FullName);
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接