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
。
我的问题涉及 C# 中对象初始化语法的语法,特别是初始化列表的语法 属性。
Newtonsoft .NET Schema 库的 JSchema 提供了一个名为 Enum
的 属性,它是一个 IList<JToken>
,我想使用对象初始化来初始化此类 JSchema class。要初始化这个 属性 我必须使用一个名为 enumStrings
.
不幸的是,字段 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
。