- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
实例属性的文档 Type.IsConstructedGenericType
不清楚或具有误导性。
我尝试了以下代码来查找此属性和相关属性的实际行为:
// create list of types to use later in a Dictionary<,>
var li = new List<Type>();
// two concrete types:
li.Add(typeof(int));
li.Add(typeof(string));
// the two type parameters from Dictionary<,>
li.Add(typeof(Dictionary<,>).GetGenericArguments()[0]);
li.Add(typeof(Dictionary<,>).GetGenericArguments()[1]);
// two unrelated type parameters
li.Add(typeof(Func<,,,>).GetGenericArguments()[1]);
li.Add(typeof(EventHandler<>).GetGenericArguments()[0]);
// run through all possibilities
foreach (var first in li)
{
foreach (var second in li)
{
var t = typeof(Dictionary<,>).MakeGenericType(first, second);
Console.WriteLine(t);
Console.WriteLine(t.IsGenericTypeDefinition);
Console.WriteLine(t.IsConstructedGenericType);
Console.WriteLine(t.ContainsGenericParameters);
}
}
代码贯穿了一个由36种组成的笛卡尔积t
.
结果:对于 32 种类型(除了 4 种组合 Dictionary<int, int>
、Dictionary<int, string>
、Dictionary<string, int>
、Dictionary<string, string>
),ContainsGenericParameters
的值是真的。
对于 35 种类型,IsGenericTypeDefinition
IsConstructedGenericType
时为假是真的。对于最后一种类型,即(不出所料):
System.Collections.Generic.Dictionary`2[TKey,TValue]
IsGenericTypeDefinition
是真的,IsConstructedGenericType
是假的。
我能否得出结论,对于泛型类型,IsConstructedGenericType
的值总是 IsGenericTypeDefinition
的相反(否定) ?
(文档似乎声称 IsConstructedGenericType
与 ContainsGenericParameters
相反,但我们清楚地展示了很多反例。)
最佳答案
是的,这是正确的。假设所讨论的 Type
是泛型类型,则 IsGenericTypeDefinition
或 IsConstructedGenericType
中的一个为真。我们可以很容易地从reference source对于 RuntimeType
(这是 Type
的具体实现,当您执行 GetType()
或 typeof
时)为什么是这样的:
public override bool IsConstructedGenericType
{
get { return IsGenericType && !IsGenericTypeDefinition; }
}
关于c# - 对于泛型类型,IsConstructedGenericType 是否始终是 IsGenericTypeDefinition 的否定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18796119/
我试图了解类型的 IsGenericTypeDefinition 属性。据我了解,它只是没有任何替代类型的类模板(我们无法创建此类的实例)。这是我的测试程序的代码: class Test {
Type.IsGenericType 和 Type.IsGenericTypeDefinition 有什么区别?有趣的是,MSDN 的 IsGenericTypeDefinition 链接已损坏。 更
实例属性的文档 Type.IsConstructedGenericType 不清楚或具有误导性。 我尝试了以下代码来查找此属性和相关属性的实际行为: // create list of types t
例子: class Base{} class Child : Base{} typeof( Base<> ).IsGenericTypeDefinition; // == true ie. param
System.Type 类型包含属性 IsGenericTypeDefinition和 ContainsGenericParameters .阅读 MSDN 文档后,我得出结论,存在这两个属性以检查类
我是一名优秀的程序员,十分优秀!