gpt4 book ai didi

c# - 如何转换泛型参数?

转载 作者:太空狗 更新时间:2023-10-29 19:58:36 24 4
gpt4 key购买 nike

这是我要写的内容:

public void Foo<T>(T parameter) {
otherObject.Bar<T>(parameter);
}

Bar() 方法的签名是:

public void Bar<T>(T parameter) where T: class 

所以我得到一个编译错误,因为 Foo 签名中的 T 没有相同的约束。不幸的是我不会写:

public void Foo<T>(T parameter) where T: class {
otherObject.Bar<T>(parameter);
}

因为 Foo 正在实现一个在外部接口(interface)中定义的方法。问题是:

我可以在调用 Bar 之前以某种方式在方法 Foo 中调换 T 吗? (注意,我可以肯定 T 总是一个类——我只需要通过编译器)。

我发现的唯一方法是使用反射,但我想知道我是否遗漏了一个更简单的技巧。

最佳答案

您可以使用 dynamic keyword像这样:

public void Foo<T>(T parameter)
{
dynamic p = parameter

otherObject.Bar(p);
}

发生的事情是在运行时解析对 otherObject.Bar 的调用,因为其中一个参数的类型为 dynamic。假设T是引用类型,则解析成功。

当然,这最终会使用反射(如您所指出的),但语法可能比您使用的要好。

当然,如果 T 不是类,这会给您一个运行时错误。

关于c# - 如何转换泛型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436755/

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