gpt4 book ai didi

c# - 如何将对象转换为不同程序集中的匿名类型?

转载 作者:行者123 更新时间:2023-11-30 19:07:29 31 4
gpt4 key购买 nike

我有一个 GridView我的DataSource在哪里是:

items.Select(i => new { ID = i.ID, Foo = i }).ToList();

RowDataBound我想访问该对象,但我不知道如何转换它...

grid.RowDataBound += (s, e) =>
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
dynamic item = e.Row.DataItem as 'what?';
}
};

如何访问此对象属性?


重现步骤

  1. 创建一个网站
  2. 创建一个页面 (default.aspx) 并放置一个 <asp:GridView ID="grid" runat="server" />
  3. 在后面的代码中:

添加

protected void Page_Load(object sender, EventArgs ev)
{
var provider = new FooProvider();

grid.DataSource = provider.Elements;
grid.RowDataBound += (s, e) =>
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
dynamic item = e.Row.DataItem;

var test = item.ID;
}
};
grid.DataBind();
}
  1. 创建一个类库项目
  2. 添加文件 FooProvider.cs

代码:

public class FooProvider
{
public IEnumerable<dynamic> Elements
{
get
{
return new int[] { 1, 2, 3 }
.Select(i => new { ID = i, Foo = i * 3 }).ToList();
}
}
}

然后在网站上添加引用。


预期结果:获取匿名对象的ID。

当前结果:

RuntimeBinderException was unhandled by user code

'object' does not contain a definition for 'ID'


反射是唯一的方法吗?

最佳答案

不要使用匿名类型。创建一个类。

public class MyCustomRow
{
int ID {get;set;}
Foo Foo {get;set;}
}

(wtf?动态?)

关于c# - 如何将对象转换为不同程序集中的匿名类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110420/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com