回到基础...
对于引用类型,可以这样做:
SomeType someObject = firstObject as SomeType;
if (someObject == null)
{
// Handle the situation gracefully
}
else
{
// Do stuff
}
对于值类型,我的理解是我们有隐式转换(没有数据丢失)、显式转换(如果有数据丢失的风险则需要)、Convert
类(我认为是“转换包装器”)以及特定于类型的转换(例如double x = Double.Parse("2");
),但我没有找到与as
上面的运算符类似的任何东西。
所以,我的问题是:该框架是否提供了一些方法/操作员/技术来执行以下操作:
if (!Convert.CanConvert(someValue, someValueType))
{
// Beware! Data loss can occur
}
else
{
// No data loss here
}
如果没有,那里的任何人都可以提出一种可靠的方法来构建一种这样的CanConvert
方法吗?
非常感谢!
编辑(1):用户案例/问题如下:给定代码的消费者(我的另一个自我,但这无关紧要)传递的东西,(1)检查某物是否是一个数字(很容易)和(2)将某些内容放在适合的“最小”数字类型中,而不会导致数据丢失。
一些背景:我正在尝试做的事情的本质是数学而不是技术:我正在尝试查看是否/如何将现有的数字类型适合某种形式的代数层次结构 Monoid=>Group=> Ring=>Field(或其简化版本)。在处理这个问题时,不太确定如何,“一件事导致另一件事”,我发现自己不得不处理类型转换......