C#列表初始化使用列表而不是初始化列表

时间:2018-02-27 11:07:39

标签: c# object-initializers list-initialization

我的问题涉及C#中对象初始化语法的语法,特别是初始化List属性的语法。

Newtonsoft .NET Schema库的JSchema提供了一个名为Enum的属性IList<JToken>,我希望使用对象初始化来初始化这样的JSchema类的istance。要初始化此属性,我必须使用名为enumStrings的JToken列表。

不幸的是,字段Enum是只读的,因为它只提供get,您可以从JSchema.Enum看到。

//The list containing the values i want to use for initialization
List<JToken> enumString = ...

var schema = new JSchema
{
    Type = JSchemaType.Object,
    Properties =
    {
        { "EnumLabel", new JSchema
        {
            Type = JSchemaType.String,
            Enum = { listaenum } //ERROR: it expects a JToken not a List<JToken>
        } }
    }
};

我也不能使用以下解决方案,因为Enum属性是只读的:

Properties =
    {
        { "EnumLabel", new JSchema
        {
            Type = JSchemaType.String,
            Enum = new List<JToken>(enumStrings) //ERROR: a property without setter or inaccessible setter cannot be assigned to
        } }
    }

有任何建议可以实现这一目标吗?这些值仅包含在enumStrings中,并且始终更改,因此可以在对象初始值设定项中对其进行硬编码。

1 个答案:

答案 0 :(得分:2)

关于属性值的集合初始值设定项call an Add method or extension method

尝试创建扩展方法:

public static class CollectionInitializerExtensionMethods
{
    public static void Add(this IList<JToken> list, IList<JToken> toAdd)
    {
         foreach (var a in toAdd)
         {
             list.Add(a);
         }
    }
}

如果失败,只需创建schema对象,然后找到您的媒体资源并手动调用AddRange