【发布时间】:2023-03-08 08:04:01
【问题描述】:
所以我知道这是可行的:
class A
{
}
class B : A
{
}
[Test]
public void CanCast()
{
Assert.That(typeof(A).IsAssignableFrom(typeof(B)));
Assert.That(!typeof(B).IsAssignableFrom(typeof(A)));
}
但是,假设这两种类型是 Int32 和 Int64。
在运行时,我可以将 Int32 值转换为 Int64 变量,但反过来不行。如何在运行时检查这种类型的转换兼容性? (IsAssignableFrom 对此不起作用,它总是为 Int32 和 Int64 提供 false)
编辑:我不能简单地尝试强制转换,因为我没有这些类型的任何值,我问的是有两种类型 A 和 B,没有两个值的假设场景a和b。
【问题讨论】:
-
真正的问题是:在运行时,如果您无法将 Int64 转换为 Int32,您会怎么做?要么你可以解决问题,然后为什么不一直应用解决方法,这样你就不需要费心检查,或者你什么也做不了,然后为什么不让系统抛出一个还是例外?
-
某些 int64 值适合 int32 是否相关?还是您想禁止它,因为它并不总是有效?
-
您可以将
Int64转换为Int32,但这是显式转换,而不是隐式转换。对于内置类型,允许的显式和隐式转换是特定于语言的,这不是您可以从有问题的Types 中找到的。问题是,你为什么想知道这个?为什么要在运行时知道 C# 在编译时是否允许隐式转换?