私が知る限り、Object.GetType()はnullを返すべきではありません。 (related discussion)なぜDapperRow.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
}
私は、ダイナミックまたはプライベートタイプがnullの原因であると思われるので、私はテストのための私のクラスライブラリを書く:別のプロジェクトで
namespace Lib
{
public class Blah
{
public static dynamic SecretObject;
static Blah()
{
SecretObject = new PrivateType();
}
}
class PrivateType
{
}
}
、ダイナミック型静的を取得GetType():
dynamic obj = Lib.Blah.SecretObject;
Console.WriteLine(obj.GetType().Name); // "Lib.PrivateType"
テストr私はまだGetType()からprivate型の情報を得ることができますが、なぜDapperRow.GetType()はnullを返しますか?
非常に明確な説明を!私の謎を解決してくれてありがとう。 – Darkthread
@Darkthreadよろしくお願いします! –