将List <object>强制转换为List <myclass> c#

Asi*_*rif 3 c# linq devexpress

通过此代码,我获得了AspxGrid中选定行的列表。

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

现在,我要执行以下操作之一。

  1. 使用linq按userid = 1的userid过滤此对象列表
  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();
Run Code Online (Sandbox Code Playgroud)

我也尝试了许多其他方法,但很累。

Him*_*ere 7

对于这种简单的Cast品尝Enumerable存在-extension-method

var myList = SelectedList.Cast<User>();
Run Code Online (Sandbox Code Playgroud)

现在,您可以轻松过滤:

var result = myList.Where(x => x.userId == 1);
Run Code Online (Sandbox Code Playgroud)


nem*_*Bu4 7

看来你有 boxed 的列表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();
Run Code Online (Sandbox Code Playgroud)