gpt4 book ai didi

c# - 是否有任何简单的方法可以从内部将值分配给模型列表?

转载 作者:行者123 更新时间:2023-12-01 23:07:52 25 4
gpt4 key购买 nike

我有两个这样的模型

public class ModelA
{
public string Name{get;set;}
public string Value{get;set;}
}

public class B
{
public List<ModelA>Items{get;set;}
}

下面的输入将被反序列化到B类

{
"Items":[
{
"Name":"Food Name"
"Value":"Fries"
},
{
"Name":"Weapon Name"
"Value":"Gun"
},
{
"Name":"Vehicle Name"
"Value":"Car"
}
]
}

我还有如下的第三个模型

public class ModelValues
{
public string FoodName{get;set;}
public string WeaponName{get;set;}
public string VehicleName{get;set;}
}

我想将 model A 的相应值添加到 ModelValues 类中,例如 FoodName 属性的值应该作为 Fries。有什么简单的方法可以将 A 类 的值分配给 ModelValues。我知道我们可以使用类似的东西

public void AssignValues(B products)
{
ModelValues values=new ModelValues();
values.FoodName=products.Find(x=>x.Name=="Food Name").Value;
values.WeaponName=products.Find(x=>x.Name=="Weapon Name").Value;
}

在实际实现中,由于 ModelValues 中的项目和输入会很大,我想避免这种逐行赋值。有什么方法可以只用几行代码来完成这个

最佳答案

我会质疑您目前的做法。当您最终可以添加任意数量的属性时,集合可能是更好的选择。甚至一本字典。

但是,以下方法将按照您想要的方式复制值。这不是最快的方法。但即使您添加了额外的名称和属性,它也会继续工作。

void Convert(B items, ModelValues values)
{
Type type = typeof(ModelValues);

foreach (ModelA item in items.Items)
{
string name = item.Name.Replace(" ", string.Empty);
PropertyInfo info = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public);
if (info != null)
info.SetValue(values, item.Value);
}
}

关于c# - 是否有任何简单的方法可以从内部将值分配给模型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70481857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com