将此var转换为long列表?

时间:2011-03-14 17:18:30

标签: c# winforms linq-to-sql .net-4.0

我在这里附有一个屏幕,我需要知道如何将列表转换为Longs列表?

var x = SchedulerMatrixStorage.Resources.Items.Select(col => col.Id);

其中,Id的类型为Object

enter image description here

6 个答案:

答案 0 :(得分:5)

由于您的列表似乎是同质的,因此您可以利用作为.NET框架一部分的内置转换函数:

var x = SchedulerMatrixStorage.Resources.Items
       .Select(col => Convert.ToInt64(col.Id)).ToList();

Convert静态类提供了几个转换函数,其中一组将各种类型的对象转换为各种内置值类型,如long。大多数这些函数也有一个带有object参数的重载(我假设它是你的集合从根本上包含的)。

请注意,如果提供的对象无法转换为long(例如,如果您要传入,例如Form),则此函数将在运行时失败,但是根据你的截图判断,这应该适合你。

答案 1 :(得分:2)

您可以在Select语句中使用long.Parse(),因为从您的屏幕截图中看来,Items集合中的值可能是字符串:

var x = SchedulerMatrixStorage.Resources.Items.Select(col => 
   long.Parse(col.Id.ToString())).ToList();

x将解析为System.Collections.Generic.List<long>

答案 2 :(得分:2)

如果Id的类型为object,但值始终为字符串,则可以使用:

var x = SchedulerMatrixStorage.Resources
                              .Items
                              .Select(col => long.Parse((string)col.Id)
                              .ToList();

但是,结果总是 字符串并不清楚。您需要向我们提供有关col.Id

的更多信息

一般来说,你想要这样的东西:

var x = SchedulerMatrixStorage.Resources
                              .Items
                              .Select(ConvertColumnId)
                              .ToList();

private static long ConvertColumnId(object id)
{
    // Do whatever it takes to convert `id` to a long here... for example:
    if (id is long)
    {
        return (long) id;
    }
    if (id is int)
    {
        return (int) id;
    }
    string stringId = id as string;
    if (stringId != null)
    {
        return long.Parse(stringId);
    }
    throw new ArgumentException("Don't know how to convert " + id +
                                " to a long");
}

答案 3 :(得分:0)

认为这应该做你想做的事

var x = SchedulerMatrixStorage.Resources.Items.Select(col => col.Id).Cast<long>().ToList();

答案 4 :(得分:0)

可能最快的方法是:

var x = SchedulerMatrixStorage.Resources.Items.Select(col => col.Id).Cast<long>();

虽然你确实应该确保你只是在他们被装箱作为对象之前就已经拥有了Id。

答案 5 :(得分:0)

好吧,我设法将第一个字符串"-1"转换为合适的长字符串。 var x = SchedulerMatrixStorage.Resources.Items.Select(col => Convert.ToInt64(col.Id)).ToList();这一行现在对我很有用。身份证总是很长的。有了这个规则,有没有最好的方法来实现这一目标?我的意思是,我的任务已经完成,但现在想要LINQ提供更好的方法......

enter image description here