【发布时间】:2013-08-15 20:18:43
【问题描述】:
有没有办法定义显式转换器或任何类似的东西,以便编译器可以自动从Generic<R>where T : R 填充Generic<T>?
我得到的错误信息是:
值“Reference
1[Dog]" is not of type "Reference1[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
}
【问题讨论】:
-
co/contra 方差可能是一个答案,具体取决于代码/需要
Generic<in T>或Generic<out T>... -
否,除非
Generic是一个接口并且类型参数是协变的。 -
顺便说一句,你知道 Lazy
吗? -
@Slugart 我不知道!我会考虑在我的实现中使用它。
标签: c# generics inheritance