0

嗨,我有一个从 http 响应返回的流。我已将其反序列化为 Object(obj),并希望将 obj 的类型检查为 MyObject 或 string 或 double。是程序错误还是我的概念错误。请帮忙。

DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(Object));
        Object Obj = obj.ReadObject(_stream) as Object;
        Product p = new Product();
        List<string> ls = new List<string>();
        List<DisplayProduct> displs = new List<DisplayProduct>();

         if (Obj.Equals(p))
            Console.WriteLine("PRODUCT");
        else if (Obj.Equals(ls))
            Console.WriteLine("LIST OF STRING");
        else
            Console.WriteLine("DISPLAY PRODUCT LIST");
4

1 回答 1

0

雨,

您可以使用 'is' 或 'as' 关键字,而不是做你想做的事。

不同之处在于asoperator 类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而不是引发异常。考虑以下表达式:

expression as type

除了仅计算一次表达式外,它等效于以下表达式。

expression is type ? (type)expression : (type)null

您将如何使用的示例as

       Derived d = new Derived();

       Base b = d as Base;

相比之下,is如果提供的表达式为非 null,则表达式的计算结果为 true,并且提供的对象可以转换为提供的类型而不会引发异常。

如果已知is表达式始终为真或始终为假,则关键字会导致编译时警告,但通常会在运行时评估类型兼容性。

以下是您可能使用的方法is

if (obj is MyObject)
{
}
于 2012-04-26T20:20:38.107 回答