如何在.NET中检查值类型之间的"安全"转换?

d..*_*d.. 6 .net math algebra

回到基础......

对于参考类型,可以这样做:

        SomeType someObject = firstObject as SomeType;
        if (someObject == null)
        {
            // Handle the situation gracefully
        }
        else
        {
            // Do stuff
        }
Run Code Online (Sandbox Code Playgroud)

对于值类型,我的理解是我们有隐式转换(没有数据丢失),显式转换(如果存在数据丢失的风险需要),Convert类(我认为是"转换包装器")以及类型特定的转换(例如double x = Double.Parse("2");),但我没有发现任何类似于as上面的操作符.

所以,我的问题是:框架是否提供了一些方法/操作符/技术来执行以下操作:

        if (!Convert.CanConvert(someValue, someValueType))
        {
            // Beware! Data loss can occur
        }
        else
        {
            // No data loss here
        }
Run Code Online (Sandbox Code Playgroud)

如果没有,那么任何人都可以建议一个可靠的方法来构建一个这样的CanConvert方法吗?

非常感谢!

编辑(1):用户案例/问题如下:给定代码的消费者传递的东西(我的另一个自己,但这是无关紧要的),(1)检查某事是否是一个数字(足够简单)和(2)将某些东西放在适合的"最小"数字类型中,而不会导致数据丢失.

一些背景:我正在尝试做的事情的本质是数学而不是技术:我试图看看是否/如何将现有的数字类型拟合成某种形式的代数层次结构Monoid => Group => Ring => Field(或其简化版本).在努力解决这个问题时,并不是很确定,"有一件事导致了另一件事",我发现自己不得不处理类型转换......

Rob*_*ood 3

各种值类型上的 TryParse 方法怎么样?

int x;

if (int.TryParse(someType.ToString(), out x))
    return x;
Run Code Online (Sandbox Code Playgroud)