【发布时间】:2016-08-13 20:33:11
【问题描述】:
我的目标是减少代码并避免在我传递的对象列表变长时添加条件,随着项目的进展,它可以达到 100 多个字段。我有一个 MyObject 类型的对象
public class MyObject
{
public string fininstId { get; set; }
public string paymentMethod { get; set; }
public string cardNumber { get; set; }
public string cardExpiry { get; set; }
public string cardCVC { get; set; }
public string AcctName { get; set; }
public string Password { get; set; }
public string mode { get; set; }
}
另一种响应类型
public class Response
{
public Response();
public string Title { get; set; }
public string Value { get; set; }
}
并且我需要将下面 dataList 中包含的所有数据复制到 MyObject,因为我知道两个字段的名称将是相同的 MyObject 和 dataList。
List<Response> dataList = new List<Response>();
/*...populating dataList here ...*/
MyObject request = new MyObject();
foreach (var item in dataList)
{
switch (item.Title)
{
case "cardNumber":
request.cardNumber = item.Value;
break;
case "cardExpiry":
request.cardExpiry = item.Value;
break;
case "cardCVC":
request.cardCVC = item.Value;
break;
case "fininstId":
request.fininstId = item.Value;
break;
case "paymentMethod":
request.paymentMethod = item.Value;
break;
case "AcctName":
request.AcctName = item.Value;
break;
case "Password":
request.Password = item.Value;
break;
}
}
无论如何它可以动态完成吗?
【问题讨论】:
-
您可以使用反射将代码量减少到仅将标题字符串与属性名称匹配的代码量,但它的性能不会很接近。
-
你可以use reflection to find a property that matches the string in
Title。您需要考虑的条件是:“如果财产不存在怎么办?”和“如何处理类型转换?”。这些都没有一个微不足道的答案。