繁体   English   中英

C#-在集合初始值设定项中检查是否为空

[英]c# - check for null in a collection initializer

我正在使用Json.NET解析Json文档,并使用Collection Initializer创建ArrayList ,如下所示

var array = new ArrayList
            {
                  inputJson["abc"].ToString(),
                  inputJson["def"].Value<float>(),
                  inputJson["ghi"].Value<float>()
            };

现在,我想添加一个空检查,以便在Json文档中缺少其中一个属性的情况下不会引发异常。

谢谢

这样的事情可以解决问题

var array = new ArrayList
{
      inputJson["abc"] != null ? inputJson["abc"].ToString() : "",
      inputJson["def"] != null ? inputJson["def"].Value<float>() : 0.0F,
      inputJson["ghi"] != null ? inputJson["ghi"].Value<float>() : 0.0F
};

我将创建扩展方法来处理此问题。 注意,我对这里的类型不满意,所以请忍受:

public static string AsString(this JObjectValue jsonValue, string defaultValue = "")
{
    if (jsonValue != null)
        return jsonValue.ToString();
    else
        return defaultValue;
}

public static T As<T>(this JObjectValue jsonValue, T defaultValue = default(T))
{
    if (jsonValue != null)
        return jsonValue.Value<T>();
    else
        return defaultValue;
}

用法:

var array = new ArrayList
{
    inputJson["abc"].AsString(),
    inputJson["def"].As<float>(),
    inputJson["ghi"].As<float>(),
    inputJson["jkl"].As(2.0f) //or with custom default values and type inference
};

这还具有避免两次击中索引器的好处(一次检查null ,第二次转换该值),并且避免重复解析或读取json输入的方式。

您可以尝试以下方法:

var array = new ArrayList
{
      inputJson["abc"] ?? inputJson["abc"].ToString(),
      ...
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM