前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dotnet 在 OpenXML SDK 的 HasValue 是什么含义

dotnet 在 OpenXML SDK 的 HasValue 是什么含义

作者头像
林德熙
发布2020-04-10 17:57:12
6920
发布2020-04-10 17:57:12
举报
文章被收录于专栏:林德熙的博客

在 OpenXML SDK 里面对于很多值,如字符串等的值,都包含一个 HasValue 属性。刚入门的小伙伴会认为这就是一个和可空类型一样的属性,表示这个属性是不是为空。其实这句话只是对一半,其实这个属性表示的是在重新定义的字符串参数里面的属性是否为空

在 OpenXML SDK 里面给很多基础类型都是自己新定义的,如 SingleValue 和 StringValue 等,这些定义都继承 OpenXmlSimpleType 类,而在 OpenXmlSimpleType 类就存在一个让刚入行的小伙伴会错误认为这是一个可空类型的 HasValue 属性

这个属性的命名刚好和可空类型相同,而刚好在 OpenXML SDK 里面存在大量的类型都是可能为空的。例如尝试获取文本的字体大小

代码语言:javascript
复制
    Int32Value fontSize = run.RunProperties.FontSize;

此时拿到了 fontSize 但是可能在 PPT 里面没有定义这个属性,也就是 fontSize 为空,此时如果没有判断就开始使用,将会在某些有趣的课件里面在这里炸掉

但是如果使用下面代码判断,将会如何?

代码语言:javascript
复制
    if (fontSize.HasValue)
    {
                
    }

哈哈,贺喜你踩到了这个 API 设计的坑,此时的 Int32Value 不是可空类型,也就是其实此时的 fontSize 是空,尝试获取他的属性将会炸掉

正确的做法是使用下面代码

代码语言:javascript
复制
if (fontSize != null)
{

}

那么这个 HasValue 的意思是什么?我将 OpenXmlSimpleType 的源代码写出来大家就知道了

代码语言:javascript
复制
        public virtual bool HasValue => TextValue != null;

没错,这个属性只是用来判断是否存在值,而不是判断自己本身是否是空

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档