C#中的is关键字原来会做null检查

本文详细解析了一个在WPF项目中遇到的C#内部类使用问题,通过Windbg调试dump文件,最终揭示了由null检查引起的异常。文章提供了深入的解释,帮助开发者理解内部类的特性及其在实际应用中的注意事项。


    internal class ShouldLimitNameLengthConverter : IValueConverter
    {
        const int mIdealNameLengthMax = 20;

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is string)
                return ((string)value).Length > mIdealNameLengthMax;
            throw (new NotSupportedException());
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Debug.Assert(false);
            throw (new NotSupportedException());
        }
    }

在改一个用户发来的crash report,通过windbg调试dump文件,确认了crash发生在Convert函数,异常是NotSupportedException,那么原因很简单,就是value is string返回了true。这个converter是WPF的DataTemplate调用的,绑定是一个对象的Text属性,是String类型。照理说没问题啊!百思不得其解!终于查了MSDN发现,in关键字是会check null的,只要对象为空就返回false:

An is expression evaluates totrue if the provided expression is non-null, and the provided object can be cast to the provided type without causing an exception to be thrown.

呵呵,长知识了!






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值