为了账号安全,请及时绑定邮箱和手机立即绑定

C#优雅的方法来检查属性的属性是否为null

C#优雅的方法来检查属性的属性是否为null

C#
拉风的咖菲猫 2019-10-17 16:02:11
在C#中,假设您想在此示例中从PropertyC中提取一个值,并且ObjectA,PropertyA和PropertyB都可以为null。ObjectA.PropertyA.PropertyB.PropertyC如何以最少的代码安全地获取PropertyC?现在,我将检查:if(ObjectA != null && ObjectA.PropertyA !=null && ObjectA.PropertyA.PropertyB != null){    // safely pull off the value    int value = objectA.PropertyA.PropertyB.PropertyC;}做更多类似这样的事情(伪代码)会很好。int value = ObjectA.PropertyA.PropertyB ? ObjectA.PropertyA.PropertyB : defaultVal;可能甚至会因为使用空伙伴运算符而崩溃。编辑最初,我说我的第二个示例就像js,但是我将其更改为伪代码,因为正确地指出了它在js中不起作用。
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

在C#6中,可以使用Null条件运算符。因此原始测试将是:


int? value = objectA?.PropertyA?.PropertyB?.PropertyC;


查看完整回答
反对 回复 2019-10-17
?
holdtom

TA贡献1805条经验 获得超10个赞

您可以在类中添加方法吗?如果没有,您是否考虑过使用扩展方法?您可以为您的对象类型创建一个扩展方法,称为GetPropC()。


例:


public static class MyExtensions

{

    public static int GetPropC(this MyObjectType obj, int defaltValue)

    {

        if (obj != null && obj.PropertyA != null & obj.PropertyA.PropertyB != null)

            return obj.PropertyA.PropertyB.PropertyC;

        return defaltValue;

    }

}

用法:


int val = ObjectA.GetPropC(0); // will return PropC value, or 0 (defaltValue)

顺便说一句,这假设您使用的是.NET 3或更高版本。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信