猿问

AddIfNotNull Dictionary<string, dynamic> 方法

我有多种创建强类型对象的方法。当我将属性映射到该对象时,我手动将键值对添加到字典中,但是正在处理的 JSON 中的某些属性可能不包含值,而下一次调用它可能包含值。


如何处理包含 null 的键不添加到列表中?请注意,我会有许多其他对象类型。下面只是一个例子


public TextType GetTextType(JToken token)

        {

            TextType text = new TextType()

            {

                type = "text",

                //Dictionary<string, dynamic>

                attributes = {

                    ["font-family"] = component.style.fontFamily, //NULL

                    ["font-size"] = component.style.fontSize, //12

                    ["font-style"] = component.style.fontStyle //Bold

                }

            };

            return text;

        }

目的:


public class TextItem

{

    public string type { get; set; }

    public IDictionary<string, dynamic> attributes { get; set; }


    public TextItem()

    {

        attributes = new Dictionary<string, dynamic>();


    }

}

我有这个方法,它抛出“该名称attributes在当前上下文中不存在”


public void AddAttribute( string key, dynamic value)

{

    if (value != null)

    {

        attributes[key] = value;

    }

}

我怎样才能修改这个方法,以便我可以在多个方法中调用它,并且只有在它包含一个值时才添加键。因为我不想为所有键值对编写多个 if 语句。


慕侠2389804
浏览 74回答 2
2回答

潇潇雨雨

也许添加扩展方法IDictionary<TKey, TValue>,例如public static class DictionaryExtension{&nbsp; &nbsp; public static void AddIfNotNull<TKey, TValue>(&nbsp; &nbsp; &nbsp; &nbsp; this IDictionary<TKey, TValue> dict, TKey key, TValue value)&nbsp; &nbsp; &nbsp; &nbsp; where TValue : class&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (value != null)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dict[key] = value;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}textItem.attributes.AddIfNotNull(1, null); //won't be addedtextItem.attributes.AddIfNotNull(1, "a"); //will be added

慕工程0101907

你目前正在做的工作是检查 null,但我可以帮助解决这个错误。如果该名称attribute不存在,那是因为您没有传入或不在范围 aTextItem中以从中获取属性列表。这是另一种固定方法:public void AddAttribute( string key, dynamic value,&nbsp; ref TextItem txtItem){&nbsp; &nbsp; if (value != null)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; txtItem.attributes[key] = value;&nbsp; &nbsp; }}抱歉,这不是评论,没有得到 50 个代表。
随时随地看视频慕课网APP
我要回答