我有一本像这样的字典
public Dictionary<string, List<string>> Options { get; set; }
如您所见,它以一个字符串为Key
和一个以列表形式的字符串集合为Value
目标是创建多个具有3个属性的ProductVariant
类型的对象。
Option1
,Option2
和Option3
对于Value
中的每个Options
,我想将Option1
设置为Option [0]值,然后Option2
属性获得Option[1]
值。
我试图做这样的事情,但是它只能得到其中一种特质,并且不起作用,因为那不是我想要达到的目的。
foreach (var thing in item.Options.ElementAt(0).Value)
{
variants.Add(new ProductVariant
{
Option1 = thing
});
}
因此,最重要的是..我想为字典中的每个项目将Option1
和Option2
分配给字典中的相应值。
如何正确执行此操作?
答案 0 :(得分:1)
一种方法是使用反射,如下面的示例所示:
public class ProductVariant
{
public ProductVariant()
{
}
public string Key { get; set; }
public string Option1 { get; set; }
public string Option2 { get; set; }
public string Option3 { get; set; }
public static IEnumerable<ProductVariant> GetProductVariants(Dictionary<string, List<string>> options)
{
foreach (var optionList in options)
{
var pv = new ProductVariant();
pv.Key = optionList.Key;
var props = pv.GetType()
.GetProperties()
.Where(x=>x.CanWrite && x.CanWrite)
.Where(x=>x.Name!="Key")
.ToArray();
for (int i = 0; i < props.Length; i++)
{
props[i].SetValue(pv,optionList.Value[i]);
}
yield return pv;
}
}
}
我测试了这种方法并且正在工作。您仍然需要进行一些验证以避免错误。
您可以在此处查看该方法:https://dotnetfiddle.net/KCKhaS