您是否在(文件菜单)调试 -> 异常中检查了 NullReferenceException(按查找并键入 NullReferenceException,然后按确定)?
我下载了 SubSonic 代码并将其用作我的项目的参考,在SubSonic.Core\Repository\SubSonicRepository.cs:209中引发了异常,因为在第 208 行未检查prop是否为空,并且任何异常都被吞下,如 line 所示213.
发生的情况是,Visual Studio 中断了在上述对话框中检查的所有异常。所以在某种程度上,这是代码的预期行为。
实际导致 prop 变为 null 的原因,在我的情况下,表字段名称是小写的,但该属性实际上是正确大小写的。
从立即:
tbl.PrimaryKey.Name
"playerinformationid"
item.GetType().GetProperties()
{System.Reflection.PropertyInfo[11]}
[0]: {System.Collections.Generic.IList`1[SubSonic.Schema.IColumn] Columns}
// *snip*
[5]: {Int32 PlayerInformationid}
// *snip*
item.GetType().GetProperty("PlayerInformationid")
{Int32 PlayerInformationid} // Works!
item.GetType().GetProperty(tbl.PrimaryKey.Name)
null
我把它一起破解以“让它工作”(警告:新手在 3.5 东西)
-var prop = item.GetType().GetProperty(tbl.PrimaryKey.Name);
+var lowerCasedPrimaryKeyName = tbl.PrimaryKey.Name.ToLowerInvariant();
+var prop = item.GetType().GetProperties().First<System.Reflection.PropertyInfo>(x => x.Name.ToLowerInvariant() == lowerCasedPrimaryKeyName);