gpt4 book ai didi

c# - 检测通用类型是否打开?

转载 作者:太空狗 更新时间:2023-10-30 00:01:24 25 4
gpt4 key购买 nike

我的程序集中有一堆常规的、封闭的和开放的类型。我有一个查询,我试图从中排除开放类型

class Foo { } // a regular type
class Bar<T, U> { } // an open type
class Moo : Bar<int, string> { } // a closed type

var types = Assembly.GetExecutingAssembly().GetTypes().Where(t => ???);
types.Foreach(t => ConsoleWriteLine(t.Name)); // should *not* output "Bar`2"

在调试开放类型的泛型参数时,我发现它们的 FullName 为空(以及其他类似 DeclaringMethod 的东西) - 所以这可能是一个方式:

    bool IsOpenType(Type type)
{
if (!type.IsGenericType)
return false;
var args = type.GetGenericArguments();
return args[0].FullName == null;
}

Console.WriteLine(IsOpenType(typeof(Bar<,>))); // true
Console.WriteLine(IsOpenType(typeof(Bar<int, string>))); // false

有没有内置的方法可以知道一个类型是否是开放的?如果没有,有没有更好的方法呢?谢谢。

最佳答案

你可以使用 IsGenericTypeDefinition :

typeof(Bar<,>).IsGenericTypeDefinition // true
typeof(Bar<int, string>).IsGenericTypeDefinition // false

关于c# - 检测通用类型是否打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com