なぜlist.Add(new B())
コンパイルしてコンパイルしlist.Add(new Wrapper<B>())
ないのですか? の暗黙のキャストが aから生成されたものと同じ型をB
返すことをコンパイラが理解できると思ったので、両方またはどちらもコンパイルしないと思いました。VS 2012 で C# 4 を使用しています。Wrapper<B>
new Wrapper<B>()
class Wrapper<T> where T : new()
{
public static implicit operator Wrapper<T>(T obj)
{
return new Wrapper<T>();
}
public static implicit operator T(Wrapper<T> obj)
{
return new T();
}
}
class A { }
class B : A { }
class MyClass
{
public static void Main(string[] args)
{
List<Wrapper<A>> list = new List<Wrapper<A>>();
//This line compiles and runs successfully
list.Add(new B());
//This line doesn't compile
list.Add(new Wrapper<B>());
}
}