【问题标题】:Pass an array or list of different objects to a function for modification将不同对象的数组或列表传递给函数进行修改
【发布时间】:2017-12-07 20:14:05
【问题描述】:

目前我正在从数据库中接收一组对象。

object [] sqlResultData = DatabaseCall.Result();

这个对象数组需要和这样的类变量匹配

CClassOfVars classVar = new CClassOfVars();
classVar.myProperty = sqlResultData[0];
classVar.myProperty1 = sqlResultData[1];

我想要做的是将类上的属性列表传递给函数,并根据顺序自动发生来自对象数组的映射。

例如:

这样定义的方法

FillData(object [] databaseValues, IList<object>())

这样称呼

CClassOfVars classVar = new CClassOfVars();
object [] sqlResultData = DatabaseCall.Result();
FillData(sqlResultData, new List<object>(){classVar.myProperty,classVar.myProperty1});

FillData 函数有望进行类型转换并将 myProperty 和 myProperty1 的值设置为 0,1 等数组位置中的值...

类似的东西

FillData(object [] databaseValues, IList<object> mapMe)
{
   for (int i = 0; i < mapMe.Count; i++)
     {
        mapMe[i] = CastToTheCorrectType(mapMe[i], databaseValues[i]);
     }
}

转换为正确的类型可能看起来像这样??我从这里拿的:cast object with a Type variable

 public T CastToTheCorrectType<T>(T hackToInferNeededType, object givenObject) where T : class
  {
     return givenObject as T;
  }

如何将不同对象类型的列表传递给所有在不同函数中修改和分配的值?

【问题讨论】:

  • 看看dapper或者实体框架,就不需要这样的hack了

标签: c# .net


【解决方案1】:

你问的问题很黑暗,很难通过一个函数来实现。有一些框架处理object relational mapping。如果它是一个选项,安装并学习一些 OR/M。如果不是......好吧,可能有一些肮脏的方式。

您可以使用 JSON.NET 库为您完成繁重的工作。通过 Nuget 非常易于使用和安装。我的观点如下。

  1. 构造一个匿名对象。使用原始对象的属性名称。
  2. 用对象数组中的数据填充它。在对象数组上旋转一个循环...
  3. 序列化匿名对象。
  4. 将 JSON 字符串反序列化为目标类型。 此时,JSON.NET 将为您处理属性映射。
  5. 列表项

例如如果您的目标类型是Person,您可以这样做:

var x = new 
{
    FirstName = String.Empty,
    LastName = String.Empty
};

var persons = new List<Person>(sqlResultData.Length);

foreach (var record in sqlResultData)
{
    x.FirstName = record[0];
    x.LastName = record[1];

    var s = JsonConvert.SerializeObject(x)`
    var personX = JsonConvert.Deserialize<Person>(s);
    persons.Add(person);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2016-03-11
    • 2020-12-22
    • 1970-01-01
    相关资源
    最近更新 更多