【发布时间】:2010-01-24 18:28:56
【问题描述】:
为什么这种转换不起作用?
public interface IMyInterface
{
}
public interface IMyInterface2 : IMyInterface
{
}
public class MyContainer<T> where T : IMyInterface
{
public T MyImpl {get; private set;}
public MyContainer()
{
MyImpl = Create<T>();
}
public static implicit T (MyContainer<T> myContainer)
{
return myContainer.MyImpl;
}
}
当我使用我的类时,它会导致编译时错误:
IMyInterface2 myImpl = new MyContainer<IMyInterface2>();
无法从 MyContainer<IMyInterface2> 转换为 IMyInterface2...hmmmm
【问题讨论】:
-
我遇到了同样的问题。这不是编译器中的错误,而是规范的记录部分。请参阅stackoverflow.com/questions/1208796/… C# 编译器团队的一位受人尊敬的成员添加了对上述问题的答案并补充说:“这是规范中非常非常令人困惑的部分”。
-
感谢您的跟进。这很有帮助。我不认为这是一个错误,但可能是我对规范不了解的地方,事实证明是这样。有点糟糕,因为它会让我的代码更干净......哦,好吧。我想我会写我自己的语言:P
-
我听到了。我有一些结构,比如 NonNull
和 Maybe ,如果规范允许这种情况,转换到这些类型/从这些类型转换会更加清晰。我希望他们改变规格;我宁愿有可能进行更便宜的转换并启用这种隐式转换方案。