我的问题涉及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中,并且始终更改,因此可以在对象初始值设定项中对其进行硬编码。
答案 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
。