【问题标题】:How can I access string values in Results View where the number of results may vary?如何在结果数可能不同的结果视图中访问字符串值?
【发布时间】:2021-11-21 09:42:36
【问题描述】:

如何访问IEnumerable 结果视图中的string 值,结果可能会有所不同?

我正在使用foreach 循环遍历list,然后获取VehicleID 的不同值:

foreach (var trip in paidTrips) {
    var vehicleids = trip
        .Select(x => x.VehicleID)
        .Distinct()
        .ToList();

我知道该怎么做:

string n = vehicleids[0];
string o = vehicleids[1];

但这给了我一个“索引超出范围”——如果有两个以上的项目,则会出现异常。

我认为使用 for 循环遍历索引并从中创建一个数组会很好吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: c# arrays string list ienumerable


    【解决方案1】:

    试试这个

    IEnumerable<string> vehicleIds=paidTrips
            .Select(x => x.VehicleID)
            .Distinct()
            .ToList();
            //or ToArray();
    

    您可以使用 foreach 循环访问

    foreach( var id in vehicleIds)
    {
           Console.WriteLine(id);
    }
    

    或者只使用索引

    var vehicleId0 = vehicleids[0];
    //or 
    var vehicleId1=vehicleId[1];
    

    或使用 linq

    var vehicleId=vehicleIds.FirstOrDefault(x=> x=="1223");
    

    【讨论】:

    • 你好@Serge。这可能是一个不同的问题。我需要访问单独的值并在 foreach 循环之外使用它们。我使用了您的示例,然后string[] vehicleArr = vehicleIds.ToArray(); 如何在 foreach 循环之外访问此数组?
    • @OleM 我更新了我的答案。
    【解决方案2】:

    调试器在欺骗你。您正在查看已添加到 Select 查询的 DistinctIterator。您在调试器中看到的值是原始 数据之前 DistinctIterator 过滤它。由于它们都具有相同的值,在 Distinct 运行后,列表中只有一个值,这就是 vehicleids[1] 失败的原因。所以问题是你的结果有 less 两个项目,而不是 more

    您当然可以使用索引器访问列表项,但在这种情况下,问题是您认为您有 2 个值,但实际上您只有 1 个。您也可以使用 for 或 @ 987654327@ 在您不知道元素数量时进行循环(使用 vehicleids.Count() 作为 for 循环的“停止”条件。

    【讨论】:

    • 啊哈,这很有趣。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    相关资源
    最近更新 更多