相关疑难解决方法(0)

为什么DapperRow.GetType()返回null?

据我所知,Object.GetType()永远不应该返回null.(相关讨论)

Dapper .Query()返回要被视为动态对象的私有类DapperRow实例.我发现了一件奇怪的事:DapperRow的.GetType()返回null.

这是重现问题的示例代码.创建一个C#项目,引用Dapper并打开与SQL Server(或其他数据库)的连接,使用.Query()执行简单的select查询并检索第一行结果.使用GetType()获取结果对象的类型,返回值为null.

using (SqlConnection cn = new SqlConnection(csSql))
{
    var rec = cn.Query("select getdate() as D").Single();
    var t = rec.GetType(); // t == null
    Console.WriteLine(t.Name); // null reference exception
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我怀疑动态或私有类型是null的原因,所以我编写我的类库进行测试:

namespace Lib
{
  public class Blah
  {
    public static dynamic SecretObject;
    static Blah()
    {
        SecretObject = new PrivateType();
    }
  }
  class PrivateType
  {
  }
} 
Run Code Online (Sandbox Code Playgroud)

在另一个项目中,获取动态类型静态字段并调用GetType():

    dynamic obj = Lib.Blah.SecretObject;
    Console.WriteLine(obj.GetType().Name); // "Lib.PrivateType"
Run Code Online (Sandbox Code Playgroud)

根据测试结果,即使将私有类型转换为动态,我仍然可以从GetType()获取私有类型信息,为什么DapperRow.GetType()返回null?

c# types dapper

3
推荐指数
1
解决办法
853
查看次数

标签 统计

c# ×1

dapper ×1

types ×1