Ich hatte heute das folgende Problem, und ich fragte mich, ob es eine Lösung für mein Problem gibt.Cast to Anonymous
Meine Idee war es, anonyme Klassen zu bauen und sie als Datenquelle für eine WinForm Binding verwenden:
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");
}
, die bisher gut funktioniert.
Das Problem, das ich hatte, ist Id, um aus der „Current“ Eigenschaft des Binding, weil ich es nicht zurück in dem Anonymous Typ werfen kann:
private void cmdOK_Click(object sender, EventArgs e)
{
var option = (???)bsOptions.Current;
}
Ich denke, es gibt keine Möglichkeit, den Typ von "Current" herausfinden und auf die Eigenschaft "Id" zugreifen? Vielleicht hat jemand eine gute Lösung ...
Ich weiß, es gibt andere (und auch bessere) Möglichkeiten, die ID (Reflection, Lesen des Wertes aus der ComboBox, nicht mit anonymen tpyes, ...) I ' Ich bin nur neugierig, wenn es möglich ist, den Typ aus bsOptions.Current auf elegante Weise zu bekommen.
Br ... anonyme Klasse kann nützlich (manchmal), aber wirklich verwendet wird, auf diese Weise, für mich ist es eine Regression zu VB Alter ist: /. –
Warten Sie, bis Dynamik in die Szene eintritt, seien Sie froh, dass wir nur Fragen zur Weitergabe anonymer Objekte sehen. –
Richtig, mit viel Glück haben wir ein brandneues "Marquee" -Attribut auf dem Label: D –