gpt4 book ai didi

.net - 当参数没有这些约束时,如何调用具有类型约束的泛型方法?

转载 作者:行者123 更新时间:2023-12-02 22:08:07 26 4
gpt4 key购买 nike

class A { }
interface I { }
void GenericStuff<T>(T x) { }
void SpecificStuff<T>(T x) where T : A, I { }

void Start<T>(T x)
{
if (x is A && x is I)
SpecificStuff(x); // <---- Wrong type
else
GenericStuff(x);
}

我遇到了上面说明的情况。在方法 Start() 中,我得到一个参数 x 并且根据它的类型我想调用 GenericStuff()SpecificStuff() 方法。自然地,类型限制阻止我这样做,并且由于有两个,我无法通过强制转换来绕过它们。

有什么方法(缺乏反射(reflection))可以做到这一点吗?

最佳答案

您可以使用动态。虽然这或多或少是美化的反射(reflect),但它看起来要好得多:

void Start<T>(T x)
{
if (x is A && x is I)
SpecificStuff((dynamic)x);
else
GenericStuff(x);
}

请注意:
如果稍后更改 SpecificStuff 的类型约束以包含第三个接口(interface),而您忘记相应地更新您的 if,您将得到运行时异常并且无法编译时间错误。

关于.net - 当参数没有这些约束时,如何调用具有类型约束的泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808370/

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