导航
  • 主页
  • WinForm
  • WPF
  • 问答

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 的,因为其它类型的时候,是不报错的
...全文
191 点赞 收藏 14
写回复
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 的判断,就无法进入下面的类型判断了。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.