Object类型判断报错。

lovingkiss 2018-07-23 08:58:52
public static bool IsEncodeDatas(object Datas)
{
Type type = Datas.GetType();
....
}
当Datas本身是Object类型,且为Null的时候,GetType()会报错...
这里是不能判断 is object 或者 !=null 的,因为其它类型的时候,是不报错的
...全文
305 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
大然然 2018-07-27
  • 打赏
  • 举报
回复
你加一个try cath不就行了吗? null的时候catch retun false回去
闭包客 2018-07-27
  • 打赏
  • 举报
回复
不论什么类型,只要值是 null,试图调用其方法都会出现空引用异常。
正怒月神 2018-07-24
  • 打赏
  • 举报
回复
其他类型都不会为null吗?
使用 C#7.0语法算了。。。
public static bool IsEncodeDatas(object Datas)
{
Type type = Datas?.GetType();
return type == null;
}

  • 打赏
  • 举报
回复
如果你“判断 is object 或者 !=null 的”,对于你的“其它类型的时候”难道会报错吗?
  • 打赏
  • 举报
回复
引用 楼主 lovingkiss 的回复:
因为其它类型的时候,是不报错的


但是当它是 null 的时候不iu报错了吗?!!
五更琉璃 2018-07-24
  • 打赏
  • 举报
回复
类型和null有啥关系
BXS_null 2018-07-24
  • 打赏
  • 举报
回复
刚刚试了一下楼主说的,传入T类型的,我是用list类型尝试的,如果直接实例化然后GetType的话是不会报错的,但是这个时候list不是为null,而是为count=0,如果list<string> cs=null 这样再GetType的话还是会报错的
wanghui0380 2018-07-24
  • 打赏
  • 举报
回复
bool CanEncodeDatas(object Datas) //注意我改成can,is表示他是不是,而can表示能不能,从你的逻辑,我们说can才能表达
{

if(datas==null) //他不存在自然不能
return false
retrun datas is IEncode //他是不是IEncode,他存在并且是IEncode,他就能
}

wanghui0380 2018-07-24
  • 打赏
  • 举报
回复
另外,is type 或者 !=null 都是可以

type这个词俺们叫“类型”,其实最准确的翻译是湾湾的“型别”,即使是null,他也有“名”--日object。即使是null,他也可以判定“他存在于‘虚无’这个存在”

正怒月神 2018-07-24
  • 打赏
  • 举报
回复
引用 6 楼 lovingkiss 的回复:
[quote=引用 4 楼 hanjun0612 的回复:]
其他类型都不会为null吗?
使用 C#7.0语法算了。。。
public static bool IsEncodeDatas(object Datas)
{
Type type = Datas?.GetType();
return type == null;
}


这是不行的,如果传入的是类型T,本身是null,getType也不会失败,
但是如果传入的就是object,本身是null。

就会报错。关键是怎样判断进入的类型是否已经进行了指定。。。[/quote]

可是我测试下来,传入类型=null的对象,一样也是null.gettype()报错啊。
static void Main(string[] args)
{
User u = null;
var q = IsEncodeDatas(u);
Console.WriteLine(q);

Console.ReadLine();
}
public static bool IsEncodeDatas(object Datas)
{
Type type = Datas.GetType(); //异常
return type == null;
}
public class User
{

}
wanghui0380 2018-07-24
  • 打赏
  • 举报
回复
道可道非常道,名可名非常名

object 非常object,object存在于存在,存在于不为“虚无”

他已经虚无,就无所谓“名”了,只能说他非“常对象”
lovingkiss 2018-07-24
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
其他类型都不会为null吗?
使用 C#7.0语法算了。。。
public static bool IsEncodeDatas(object Datas)
{
Type type = Datas?.GetType();
return type == null;
}


这是不行的,如果传入的是类型T,本身是null,getType也不会失败,
但是如果传入的就是object,本身是null。

就会报错。关键是怎样判断进入的类型是否已经进行了指定。。。
lovingkiss 2018-07-24
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
如果你“判断 is object 或者 !=null 的”,对于你的“其它类型的时候”难道会报错吗?


当一个非object的特定类型T,本身为null的时候,也是可以判断类型的。
如果加入 !=null 的判断,就无法进入下面的类型判断了。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧