这是假的: typeof(double).IsAssignableFrom(typeof(int))
这是假的: typeof(int).IsAssignableFrom(typeof(double))
但这有效:
double a = 1.0;
int b = 1;
a = b;
Run Code Online (Sandbox Code Playgroud)
很明显,a double 可以从a 分配,int但框架IsAssignableFrom()会出错.
为什么?或者这是.NET中由int和double的特殊性质引起的错误,它没有继承关系但可以分配(在一个方向上)?
鉴于以下类型:
class A { }
class B
{
public static implicit operator A(B me)
{
return new A();
}
}
class Test<T> where T : A { }
Run Code Online (Sandbox Code Playgroud)
我试过了
var b = new Test<B>();
Run Code Online (Sandbox Code Playgroud)
并期望它失败,它做到了.但错误信息是
类型'B'不能用作泛型类型或方法'Test'中的类型参数'T'.没有从'B'到'A'的隐式引用转换.
但是,是从B到A的隐式引用转换是这只是一个奇怪的消息?有没有隐式引用转换为亚当·罗宾逊的答案所示.消息是正确的.
请注意,MSDN说:
其中T :(基类名) - 类型参数必须是或从指定的基类派生.
这解释了为什么它不被允许,因为B它不是源自A