相关疑难解决方法(0)

为什么IsAssignableFrom()不适用于int和double?

这是假的: 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的特殊性质引起的错误,它没有继承关系但可以分配(在一个方向上)?

.net c# types

25
推荐指数
1
解决办法
2624
查看次数

你能用隐式转换满足泛型约束吗?

鉴于以下类型:

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

c# generics implicit-conversion

6
推荐指数
2
解决办法
2126
查看次数

标签 统计

c# ×2

.net ×1

generics ×1

implicit-conversion ×1

types ×1