gpt4 book ai didi

.net - 检测接口(interface)泛型类型参数的差异

转载 作者:行者123 更新时间:2023-12-04 23:03:11 29 4
gpt4 key购买 nike

有没有办法反射(reflect)接口(interface)以检测其泛型类型参数和返回类型的差异?换句话说,我可以使用反射来区分这两个接口(interface)吗:

interface IVariant<out R, in A>
{
R DoSomething(A arg);
}


interface IInvariant<R, A>
{
R DoSomething(A arg);
}

两者的 IL 看起来相同。

最佳答案

有一个GenericParameterAttributes Enumeration您可以使用它来确定泛型类型上的差异标志。

要获取泛型类型,请使用 typeof但省略类型参数。用逗号表示参数的数量(来自链接的代码):

Type theType = typeof(Test<,>);
Type[] typeParams = theType.GetGenericArguments();

然后,您可以检查类型参数标志:
GenericParameterAttributes gpa = typeParams[0].GenericParameterAttributes;
GenericParameterAttributes variance = gpa & GenericParameterAttributes.VarianceMask;

string varianceState;
// Select the variance flags.
if (variance == GenericParameterAttributes.None)
{
varianceState= "No variance flag;";
}
else
{
if ((variance & GenericParameterAttributes.Covariant) != 0)
{
varianceState= "Covariant;";
}
else
{
varianceState= "Contravariant;";
}
}

关于.net - 检测接口(interface)泛型类型参数的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2872458/

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