You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何object类型值为0、100等时,value is ushort判断返回false?

问题:Object类型判断ushort始终返回false的原因及解决办法

我需要明确判断object类型的值具体是ushort、short、int、long还是double类型,编写了如下代码:

string dataType = "";
object value = 0;
if (value is ushort)
{
    dataType = "ushort";
}
else if (value is short)
{
    dataType = "short";
}
else if (value is int || value is long
           || value is ulong  || value is double)
{
    dataType = "int";
}
else
{
    dataType = "float";
}  

但if (value is ushort)这一行,在value为0、100等小于65535的值时,判断结果始终为false,请问这是为什么?


原因分析

问题核心在于C#值类型的装箱规则:

  • 像0、100这类整数字面量,默认类型是int(System.Int32)。当你把它赋值给object变量时,装箱后的对象本质是int类型实例,而非ushort。
  • is运算符判断的是对象的实际运行时类型,而非值是否落在目标类型的取值范围内。哪怕数值在ushort区间内,只要装箱后的类型是int,value is ushort就会返回false。

举个直观的例子:

object value1 = 0;          // 装箱为int类型实例
Console.WriteLine(value1 is ushort); // 输出false

object value2 = (ushort)0;  // 显式声明为ushort后装箱
Console.WriteLine(value2 is ushort); // 输出true

解决方案

根据需求不同,有两种处理方式:

方案1:判断值是否可转换为目标类型(兼容范围判断)

如果需要把落在ushort范围内的int值也识别为ushort,可以结合模式匹配的转换逻辑:

string dataType = "";
object value = 0;

if (value is ushort)
{
    dataType = "ushort";
}
else if (value is short)
{
    dataType = "short";
}
else if (value is int i && i >= ushort.MinValue && i <= ushort.MaxValue)
{
    dataType = "ushort";
}
else if (value is int || value is long || value is ulong || value is double)
{
    dataType = "int";
}
else
{
    dataType = "float";
}

方案2:严格判断运行时类型

如果只需要识别原本就是ushort类型的装箱对象,直接用GetType()对比类型:

string dataType = "";
object value = 0;

Type valueType = value.GetType();
if (valueType == typeof(ushort))
{
    dataType = "ushort";
}
else if (valueType == typeof(short))
{
    dataType = "short";
}
else if (valueType == typeof(int) || valueType == typeof(long) || valueType == typeof(ulong) || valueType == typeof(double))
{
    dataType = "int";
}
else
{
    dataType = "float";
}

内容的提问来源于stack exchange,提问作者Geervani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:45:25