【发布时间】:2012-04-06 07:32:45
【问题描述】:
关于 SO 的第一个问题 - 我已经阅读了很多次,所以有时间在社区中深入了解一下!
我首先从 Linq 查询中获取一行:
var relationshipDetails = (from p in dc.tbl_ClientRelationships
where p.ID == relationship_id
select p).FirstOrDefault();
然后我查看一个字符串列表 (_cols),它是已知的列名(以及表单项名称),如下所示:
foreach (string c in _cols)
{
if (relationshipDetails.GetType().GetProperty(c).GetValue(relationshipDetails, null).ToString() != null)
{
setValue(relationshipDetails.GetType().GetProperty(c).GetValue(relationshipDetails, null).ToString(), c);
}
}
setValue() 方法基本上将返回的值分配给 web 控件(并且具有确定类型以及应如何分配等的逻辑。)
我的问题是,有没有更好的方法从已知属性值中获取 Linq 对象的值? 它适用于某些形式,但最近刚刚在我身上炸毁!
否则,我很想回到旧方法或从 DAL 返回 DataRow,然后轻松地按名称引用!
提前致谢, 标记
【问题讨论】:
-
C# 不会“炸毁”,它会引发异常。例外情况包括类型、消息和堆栈跟踪等信息。
-
是的,确实需要更好的方法,您在循环中使用反射。那是一个昂贵的操作。等高手解答
-
你为什么要积极尝试抛弃类型安全?
-
@Jon 我在线上收到
System.NullReferenceException以检查它是否为空。 IE。在我检查它是否为空之前它是空的。但是,如果我对可以正常工作的属性之一执行 response.write。 -
@RemarkLima:太好了。现在调试代码并找出表达式在以
relationshipDetails.开头的链中的哪个点计算为null。