将数组或不同对象列表传递给函数进行修改

时间:2017-12-07 11:42:03

标签: c# .net

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

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;
  }

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 构造一个匿名对象。使用原始对象的属性名称。
  2. 使用对象数组中的数据填充它。在对象数组上旋转一个循环......
  3. 序列化匿名对象。
  4. 将JSON字符串反序列化为目标类型。 此时,JSON.NET将为您处理属性映射。
  5. 列表项
  6. E.g。如果你的目标类型是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);
    }