将匿名对象转换为类型

问题描述 投票:0回答:1

我有一个 ASP.NET 4.5 应用程序,它使用了数据绑定的 Telerik 多列组合框。

我遇到的问题是,它没有像普通 Telerik 组合框或 asp.net 组合框那样的有效项目数组,而是必须从类型为

object
的 DataSource 属性中检索数据。

给出以下初始化:

class bob 
{
    Guid id { get; set; }  
    String name { get; set; }  
    String tel { get; set; }
}

List<bob> bobarray = .... // some data
MyCombo.DataSource = bobarray;
MyCombo.DataBind();

我无法将

MyCombo.DataSource
投射回
List<bob>
。 相反,我得到一个匿名类型
<>f_AnonymouseType12
3[[System.Guid, System.String, System.String`

我可以将数据源转换为

IEnumerable<object>
,但我无法访问各个属性或将其转换回其原始类型
List<bob>

var bobarray = ((IEnumerable<object>)MyCombo.DataSource).ToList();

但是

bobarray
仍然是
List<object>
类型,尝试转换为
List<bob>
IEnumerable<bob>
会抛出异常“指定的转换无效”。

我想要做的是在多列下拉列表中搜索具有匹配 id 的项目,然后使用其索引 (

bobarray.FindIndex()
) 将找到的项目设置为选定状态。

如果我这样做

bobarray[0].ToString();
,那么我可以看到带有值的匿名类型属性(id、name、tel),但它是字符串而不是类型。

有谁知道如何正确转换项目,或者在 ASP.NET 4.5 中的 Telerik radmulticolumncombobox 中找到项目的索引?

c# asp.net telerik
1个回答
0
投票

为了回答我自己的问题,我最终编写了一个使用反射的扩展方法。 它对目标和源采用两种类型(T 和 S),然后仅复制具有相同名称的属性(sourceProp.GetValue()targetProp.SetValue())。

我还必须检查来源是否为 IEnumerable

© www.soinside.com 2019 - 2024. All rights reserved.