如何铸造泛型<;T>;到Generic<;R>;其中T是R的一个子类
本文关键字:gt lt 子类 一个 Generic 泛型 何铸造 其中 | 更新日期: 2023-09-27 18:27:46
有没有一种方法可以定义显式转换器或类似的东西,使编译器可以从Generic<R>
where T : R
自动填充Generic<T>
?
我得到的错误信息是:
值"Reference
1[Dog]" is not of type "Reference
1[Pet]"不能在此泛型集合中使用。
我的参考类如下:
public interface IReference<T>
{
T Value { get; }
}
public class Reference<T> : IReference<T>
{
#region Properties
public string ref_type { get; set; }
public string ref_id { get; set; }
public Uri href { get; set; }
private bool resolved = false;
private T _value = default(T);
public T Value
{
get
{
if( !resolved && href != null ) resolve();
else if( href == null ) return null;
return _value;
}
}
#endregion
#region Constructors
public Reference() { }
public Reference(string ref_id)
{
this.ref_id = ref_id;
}
#endregion
#region members
private void resolve()
{
if( href != null )
{
_value = APIRequestMethods.GetUri<T>(href);
resolved = true;
}
else
throw new Exception("Cannot resolve the reference because the href property has not been set.");
}
#endregion
}
只有当泛型类型是接口,并且使泛型类型协变(即:IGeneric<out T>
)时,这才会起作用。
请注意,这只适用于接口或委托。有关详细信息,请参见Generics中的协方差和反方差。