【发布时间】:2010-11-27 10:34:11
【问题描述】:
我今天遇到以下问题,想知道是否有解决我的问题的方法。
我的想法是构建匿名类并将其用作 WinForm BindingSource 的数据源:
public void Init()
{
var option1 = new
{
Id = TemplateAction.Update,
Option = "Update the Templates",
Description = "Bla bla 1."
};
var option2 = new
{
Id = TemplateAction.Download,
Option = "Download the Templates",
Description = "Bla bla 2."
};
var list = new[] {option1, option2}.ToList();
bsOptions.DataSource = list; // my BindingSource
// cboTemplates is a ComboBox
cboTemplates.DataSource = bsOptions;
cboTemplates.ValueMember = "Id";
cboTemplates.DisplayMember = "Option";
lblInfoTemplates.DataBindings.Add("Text", bsOptions, "Description");
}
到目前为止一切正常。
我遇到的问题是从 BindingSource 的“当前”属性中取出 Id,因为我无法将其转换回匿名类型:
private void cmdOK_Click(object sender, EventArgs e)
{
var option = (???)bsOptions.Current;
}
我想没有办法找出“Current”的类型并访问“Id”属性吗? 也许有人有一个很好的解决方案...
我知道还有其他(也是更好的)方法来获取 Id(反射,从 ComboBox 读取值,不使用匿名 tpyes,...)我只是好奇是否可以将类型输出bsOptions.Current 的优雅方式。
【问题讨论】:
-
Br...匿名类可能有用(有时),但实际上,那样使用,对我来说这是对 VB 时代的回归:/。
-
等到动态进入场景,很高兴我们只看到有关传递匿名对象的问题。
-
好吧,运气好的话,我们将在标签上拥有一个全新的“marquee”属性:D
标签: c# anonymous-types anonymous-class