Вот мой код:
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
}
Итак, как вы можете видеть, я пытаюсь вернуть ссылку на конкретный c объект, содержащийся в IComponent[]
, и я знаю, что все эти объекты являются типами значений.
Код скомпилировался бы, если бы мой метод возвратил ref IComponent
вместо этого, но проблема была бы такой же, как если бы я был вынужден выполнить преобразование на выходе метода.
Я знаю, что объект, который я хочу вернуть, имеет правильный тип и может быть интерпретирован как TComponent
, но компилятор не может этого знать и отправляет мне ошибку. Во-первых, я хотел использовать указатели, но они могут использоваться на управляемых типах.
Итак, вот мой вопрос: как я могу сказать компилятору, что мой объект имеет правильный тип и может быть возвращен по ссылке?
Другими словами, как я могу преобразовать ссылочный тип в другой?