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

C# List initialization using a list instead of Initializing List

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

Newtonsoft .NET Schema 库的 JSchema 提供了一个名为 Enum 的 属性,它是一个 IList<JToken>,我想使用对象初始化来初始化此类 JSchema class。要初始化这个 属性 我必须使用一个名为 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 中并且总是会更改,因此它们可以在对象初始值设定项中进行硬编码。

属性 值的集合初始值设定项 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