Cast List<object> to List<myclass> c#

5

通过这段代码,我得到了AspxGrid中选定行的列表。

string[] fieldName = new string[] { "UserId", "Name", "Address" };
List<object> SelectedList = Grid.GetSelectedFieldValues(fieldName);

现在我想执行以下操作之一:
  1. 使用linq通过用户ID筛选此对象列表,其中userid = 1
  2. 将此 List<object> 强制转换为 List<Users>
我尝试了以下两种方法,但出现异常。

无法将类型为“System.Object []”的对象强制转换为类型“CubeDataObject.Claims”。

List<Users> mylist = (List<Users>)(Object)SelectedList;
List<Users> listd = SelectedList.Select(n => (Users)n).ToList();

我也尝试了许多其他方法,但感到疲惫。


你在哪里收到异常? - Koneke
首先感谢您的快速回复。当我使用这种方法时会出现这种情况。 List<Users> listd = SelectedList.Select(n => (Users)n).ToList(); - Gujjar
我很担心为什么有些人会对我的问题进行负面评价。 :/ - Gujjar
3个回答

9

对于这个简单的任务,Enumerable 上存在Cast-extension-method:

var myList = SelectedList.Cast<User>();

现在您可以轻松筛选:
var result = myList.Where(x => x.userId == 1);

8

看起来你有一组装箱的object[]列表。因此,你需要将其拆箱并通过相应的索引获取UserIdNameAddress的值。
下面是一个示例:

List<Users> mylist = SelectedList
    .Where(item => (int)((object[])item)[0] == 1)
    .Select(item =>
    {
        var values = (object[])item;

        return new Users()
        {
            UserId = (int)values[0],
            Name = (string)values[1],
            Address = (string)values[2]
        };
    })
    .ToList();

工作得非常完美。 :) 非常感谢 @nempoBu4 - Gujjar

3

Linq有一个特殊的方法用于将列表进行强制转换:

List<Users> mylist = SelectedList.Cast<Users>().Where(u => u.userid == 1).ToList();

假设这些对象确实可以转换为一个用户对象,那么这将起作用。


异常 无法将类型为“System.Object[]”的对象强制转换为类型“Users”。 - Gujjar
在这种情况下,您的对象不是用户类型。看一下nempobu4的解决方案。 - Dennisch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接