gpt4 book ai didi

c# - 当使用相同类型参数关闭时,如何检查类型是否可分配给开放泛型类型?

转载 作者:行者123 更新时间:2023-12-02 22:37:25 30 4
gpt4 key购买 nike

如果传递的类型可分配给(派生自)开放(无界)泛型类型的闭包,我需要一个返回 true 的方法。该方法应按如下方式工作:

OpenGenericIsAssignableFrom(typeof(ICollection<>), typeof(IList<String>))

应该返回 true。

最佳答案

为什么不简单地关闭开放泛型类型,看看它是否可以从封闭类型中继承?问题是用相同的参数关闭它可能无效,所以你需要捕获它

private static bool OpenGenericIsAssignableFrom(
Type openGenericType,
Type typeToCheck)
{
if (!openGenericType.IsGenericType || typeToCheck == null) return false;

if(typeToCheck.IsGenericType)
{
var typeArgs = typeToCheck.GetGenericArguments();
if (typeArgs.Length == openGenericType.GetGenericArguments().Length)
{
try
{
var closed = openGenericType.MakeGenericType(typeArgs);
return closed.IsAssignableFrom(typeToCheck);
}
catch
{
//violated type contraints
return false
}
}
}
else
{
return OpenGenericIsAssignableFrom(openGenericType, typeToCheck.BaseType)
|| typeToCheck.GetInterfaces()
.Any(i=> OpenGenericIsAssignableFrom(openGenericType,i));
}
}

关于c# - 当使用相同类型参数关闭时,如何检查类型是否可分配给开放泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261112/

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