我的DropDownList包含以下值:
ddl.SelectedValue = { Id = 234, Name = "ABC Name" }
如何获取Id的值?
我使用WinForms和RadDropDownList
答案 0 :(得分:2)
试试这个:
public int GetId(object obj)
{
var anon = new { Id = 0, Name = string.Empty };
var obj2 = MakeSameType(obj, anon);
return obj2.Id;
}
public static T MakeSameType<T>(object obj, T anonymous)
{
return (T)obj;
}
使用它像:
int id = GetId(ddl.SelectedValue);
如果它有效,这要归功于等效的匿名类型如何&#34;浓缩&#34; C#编译器在单一类型中。
请注意,此解决方案与您一样脆弱
如果您添加/删除/重命名匿名类型的属性,GetId
将会中断(您必须保持var anon = new {...}
完全对齐) 。如果将创建匿名类型集合的方法移动到另一个程序集,它也会中断(因为只有同一程序集中的匿名类型是&#34;统一&#34;由编译器完成)。
一般来说,你不应该拥有匿名类型&#34; escape&#34;一个方法。匿名类型应保留在定义它的方法中。直接将其指定为控件的DataSource
会产生问题。
如果您感到懒惰并且不想为键值创建类型,请使用Tuple
:
var tuple = Tuple.Create(something, somethingelse, somethingstillelse);
var value1 = tuple.Item1;
var value2 = tuple.Item2;
var value3 = tuple.Item3;
等等。
答案 1 :(得分:1)
由于您使用的是匿名类型,因此它并不复杂。但是,您可以将SelectedValue转换为动态,并从那里抽取“Id”:
dynamic selectedValue = ddl.SelectedValue;
int id = selectedValue.Id;
但我会建议为这种情况声明自己的类或结构。
答案 2 :(得分:0)
我更改了LINQ查询
来自:
var query = (from q in tableq where ...
select new {Id = q.Id, Name = q.Name});
为:
var query = (from q in tableq where ...
select q);
...然后将其更改为:
table1.Id = (ddl.SelectedValue as tableq).Id == null ? table1.Id : (ddl.SelectedValue as tableq).Id;