gpt4 book ai didi

c# - 如何向下转换通用类型的实例?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:07 26 4
gpt4 key购买 nike

我正在为如何正确使用 C# 泛型而苦苦挣扎。具体来说,我希望有一个将泛型类型作为参数并根据泛型类型执行不同操作的方法。但是,我不能“向下转换”通用类型。请参见下面的示例。

编译器提示 Actor (Bar<Foo>)说“无法将类型 Bar<T> 转换为 Bar<Foo>”。但是在运行时, Actor 是可以的,因为我已经检查了类型。

public class Foo { }

public class Bar<T> { }

// wraps a Bar of generic type Foo
public class FooBar<T> where T : Foo
{

Bar<T> bar;

public FooBar(Bar<T> bar)
{
this.bar = bar;
}

}

public class Thing
{
public object getTheRightType<T>(Bar<T> bar)
{
if (typeof(T) == typeof(Foo))
{
return new FooBar<Foo>( (Bar<Foo>) bar); // won't compile cast
}
else
{
return bar;
}
}
}

最佳答案

编译器无法知道 Bar<T>可以转换为 Bar<Foo>在这种情况下,因为它通常不是真的。你必须通过向 object 引入 Actor 来“作弊”。介于两者之间:

return new FooBar<Foo>( (Bar<Foo>)(object) bar);

关于c# - 如何向下转换通用类型的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144902/

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