这是我的代码:
public ref TComponent Get<TComponent>()
where TComponent : struct, IComponent
{
for (int i = 0; i < Components.Length; i++)
{
if (Components[i] is TComponent)
{
// CS8151: The return expression must be of type 'T' because this method returns by reference
return ref Components[i];
}
}
// throw an exception
}
因此,如您所见,我正在尝试返回对IComponent[]
中包含的特定对象的引用,并且我知道所有这些对象都是值类型。
如果我的方法返回ref IComponent
,代码将编译,但问题将与我将被迫在方法输出时进行转换相同。
我知道我要返回的对象具有正确的类型并且可以解释为TComponent
但编译器无法知道并发送给我错误。首先,我想使用指针,但它们可以用于托管类型。
所以,这是我的问题:我如何告诉编译器我的对象具有正确的类型并且可以通过引用返回?
换句话说,如何将一个引用类型转换为另一个引用类型?
泛型不能用于返回任何类型。泛型是类型安全的。因此,无论您使用 Get(( 方法传递什么类型,您都需要准确返回该类型。
Bat 你可以让所有类型从相同的接口或相同的基类型继承,然后返回该类型。
此外,需要考虑@RamblinRose的评论