有一个Object类型的对象,怎样判断它能否赋值给另一种类型的变量。
如:
object o = 1;//此时o的实际类型为整型。
现在想将o的值赋值给一个double类型的变量,如何做类型检查。补充:不采用这样的方式try
{
    double d = o;
}
catch
{}

解决方案 »

  1.   

    用这个吧,就算不成功顶为dblValue=0
    double dblValue=-1;
    double.TryParse(o.ToString(),out dblValue);
      

  2.   

    具体情况是这样的。
    有这一样一个变量 a ,它的类型可能是任何类型。现在想对其赋值,因为 a 的类型不确定,所以想在赋值前做类型检查。
    现在遇到的问题是,如果 a 是引用类型,这一使用Type类的某些方法判断类型是否兼容,但如果 a 是值类型,除了能够判断出类型一样外(即 a 如果为double类型,可也判断出要赋得值是不是double类型),但对于这样的情况无法判断,即如果 a 为double类型,如果对其赋一个int类型的值也是可以的。现在如果对这种情况作出判断,也就是判断两个类型之间是否可以进行隐式类型转换。注:is 需要事先知道类型。
      

  3.   

    做一下判断,if ((o.GetType().IsValueType)==True)
    {
        赋值
    }如果要具体的类型,可以进行相应的判断if (obj.GetType().Name.ToString()=="Int32")
    {
       赋值
    }
      

  4.   

    对于值类型的转换请参考:System.Convert
      

  5.   

    像int类型的值是可以直接赋值给double、long等类型的变量,而不用显示转换。我想做的是怎样判断出这种情况,即这样情况下也是允许赋值的。注:编码的时候并不知道将来要赋值的变量的类型,即要赋值的变量的类型具体是int、还是double、long等其它类型,编码时是不知道的。
      

  6.   

    不是已经告诉你了吗做一下判断,if ((o.GetType().IsValueType)==True)
    {
      赋值
    }
      

  7.   

    int类型的值可以直接赋值给double、long等类型变量。如果是将double等类型的值赋值给int类型的变量时不可以的。
      

  8.   

    System.Convert 类的静态方法用于支持与 .NET Framework 的基础数据类型之间的转换。 受支持的基类型是 Boolean、 Char、 SByte、 Byte、 Int16、 Int32、 Int64、 UInt16、 UInt32、 UInt64、 Single、 Double、 Decimal、 DateTime 和 String。 与基类型之间的转换
    存在将每个基类型转换为每个其他基类型的转换方法。但是,根据运行时基类型和目标基类型的值,对特定转换方法的实际调用会产生五种结果之一。这五种结果如下:无转换。当尝试将一个类型转换为其本身时(如使用 Int32 类型参数调用 Convert ..::.ToInt32(Int32) )会发生这种情况。 在这种情况下,此方法只是返回原始类型实例。一个 InvalidCastException。 当不支持特定转换时会发生这种情况。以下转换会引发 InvalidCastException。 将 Char 转换为 Boolean、 Single、 Double、 Decimal 或 DateTime。 将 Boolean、 Single、 Double、 Decimal 或 DateTime 转换为 Char。 将 DateTime 转换为 String 以外的任何其他类型。 将 String 以外的任何其他类型转换为 DateTime。 一个 FormatException。 当由于字符串格式不正确而导致将字符串值转换为任何其他基类型的尝试失败时,会发生该异常。以下转换会引发该异常:要转换为 Boolean 值的字符串不等于 Boolean ..::.TrueString 或 Boolean ..::.FalseString 。 要转换为 Char 值的字符串由多个字符组成。 要转换为任何数值类型的字符串没有被识别为有效数字。要转换为 DateTime 的字符串没有被识别为有效日期和时间值。 转换成功。对于前面结果中未列出的两个不同基类型之间的转换,所有扩大转换和不会导致数据丢失的收缩转换都将成功,此方法将返回目标基类型的值。一个 OverflowException。 当收缩转换导致数据丢失时会发生这种情况。例如,尝试将值为 10000 的 Int32 实例转换为 Byte 类型会引发 OverflowException,因为 10000 超出了 Byte 数据类型的范围。 
      

  9.   

    我想知道有没有一种方法可以检查出能转换成功的情况。即任意给定两个类型 type1 type2,怎样判断type2类型的值赋值给type1类型的变量,而不引发异常。
      

  10.   

    实际上我想知道的是怎样判断两个值类型之间能否进行隐式转换。
    注:两个类型在编写代码时时不确定的。代码中时通过GetType方法获取到两种类型。由于时间比较急,我就采用枚举的方式写了一个判断方法,如果谁有跟好的方法,请不吝赐教。