c# - 将数组转换为类型数组

标签 c# arrays types

我正在从数据库数据创建一个通用对象:

object[] data = new object[dataReader.FieldCount];
dataReader.GetValues(data);
T t = (T)Activator.CreateInstance(typeof(T), data);

但是,类型在第三行没有构造函数错误。我想添加一个 if :

if (typeof(T).GetConstructor(data.TypesOf()) != null)

data.TypesOf()实际上是一个数组 - Type[] - 包含所有类型的对象 data .

什么相当于data.TypesOf()真的有用吗?

或者我需要迭代 data并自己构建它?

最佳答案

我假设您的 object[] 包含的值是例如 intstringfloat,并且您正在尝试解析 public T(int,string,float) 形式的构造函数。要获取类型,您可以使用:

var types = Array.ConvertAll(data, x => x.GetType());

但这实际上对您没有多大帮助,因为这正是 Activator.CreateInstance(typeof(T), data) 已经尝试做的事情 - 所以如果 Activator 失败,我看不出你会做得更好 - 除非关键区别在于构造函数是非公开的,而你打算提供一些 BindingFlags

不过,就我个人而言,我建议按名称 绑定(bind)比按位置绑定(bind)更容易;有像 dapper 这样的工具这将为您完成所有这些,让您可以简单地使用:

var data = conn.Query<SomeType>(sql, args).ToList();

例如:

int userId = 12345;
var users = conn.Query<User>("select * from Users where Id = @userId",
      new {userId}).SingleOrDefault();

关于c# - 将数组转换为类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16414504/

相关文章:

c# - Newtonsoft.Json - 从 JSON 中获取反序列化对象的相应行号,以便更好地处理错误

c# - 在条件中使用赋值是否安全? C/C++、C#

python - 如何通过索引获取双端队列元素?

java - 如何使用二分查找获得更多的搜索数据?

C++:使用for循环允许用户将数字输入数组

c - 有符号字符的无符号字符输出

haskell - 指数函数的简单实现

c# - 如何替换正则表达式中匹配的一部分

c# - 如何在不更改 maxJsonLength 的情况下发送大型/多部分 JSON 对象?

list - 笛卡尔积类型错误