无法在 c# 中使用“动态”从数据项获取值
本文关键字:动态 数据项 获取 | 更新日期: 2023-09-27 18:35:59
我正在使用Telerik RadGrid的NeedDataSource事件绑定到匿名类型。
现在,OnItemDataBound用于在RadGrid中绑定DropDownList。
protected void rgQuotations_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
dynamic di = e.Item.DataItem;
DropDownList ddlStatus = (e.Item.FindControl("ddlStatus") as DropDownList);
if (di.Status == 4)
{
ddlQuoteStatus.Items.Add("4");
}
}
}
当它尝试获取 di.Status
的值时,它会抛出异常
System.Core 中发生类型为"Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"的异常.dll但未在用户代码中处理
附加信息:"对象"不包含"状态"的定义
但是我将鼠标悬停在它上面可以清楚地看到价值。
如何在不出错的情况下获取此值?
如 C# 中所述,"dynamic"无法访问在另一个程序集中声明的匿名类型的属性,不能使用在另一个程序集中创建的匿名对象,因为它是内部的。
由于您控制实例化对象的程序集,因此有一种可能的解决方法(链接答案中未提及,因此我在此处添加答案)。通过添加程序集属性,可以使原始程序集内部类型在使用对象的程序集中可见InternalsVisibleTo
:
// in assembly where you create the anonymous object
// and assuming the assembly where you use it in Grid is called Xyz
[assembly:InternalsVisibleTo("Xyz")]