IEnumerable Zip函数不能用于十进制类型,但可以用于其他类型

本文关键字:类型 用于 但可以 其他 Zip 十进制 不能 IEnumerable 函数 | 更新日期: 2023-09-27 17:51:21

我在Visual Studio的c#应用程序中使用zip函数合并两个IEnumerable对象。我有以下代码:

static void Main(){
    using (var conn = new SqlConnection(connectionString)){
          conn.Open();
          IEnumerable<string> tmp1 = conn.Query<string>("SELECT NAME FROM Table1");
          IEnumerable<string> tmp2 = conn.Query<string>("SELECT Type FROM Table1");
          IEnumerable<decimal> mock1 = conn.Query<decimal>("SELECT value1 FROM mockData1");
          IEnumerable<decimal> mock2 = conn.Query<decimal>("select value2 FROM mockData2");
          foreach (var item in tmp1.Zip(tmp2, (a, b) => new { a, b })){
             Console.WriteLine(item.a);
             Console.WriteLine(item.b);
             Console.ReadKey();
          }
    }
}
当我运行上面的代码时,控制台输出如下内容:
CorrectName1
CorrectType1
CorrectName2
CorrectType2
....

,这是我所期望的。但是,当我做以下更改时:

foreach (var item in mock1.Zip(mock2, (a, b) => new { a, b })){
        Console.WriteLine(item.a);
        Console.WriteLine(item.b);
        Console.ReadKey();
}

程序完全跳过控制台输出,错误列表中没有错误。

从本质上讲,为什么程序对string类型的IEnumerables可以正常工作,而对decimal类型的IEnumerables却不行?在你问之前,我已经通过管理工作室检查了这两个查询,它们是正确的,我能够在只涉及两个集合独立的foreach循环中迭代mock1和mock2,但由于某种原因,zip函数似乎失败了IEnumerable<十进制>。

编辑:这里有两个foreach循环来确认我的假设,即查询不坏:

foreach (var item in mock1){
    Console.WriteLine(item);
    Console.ReadKey();
}

mock1的输出演示:

Value from mock1 (1)
Value from mock1 (2)
...

/* * */
foreach (var item in mock2){
    Console.WriteLine(item);
    Console.ReadKey();
}

mock2的输出演示:

Value from mock2 (1)
Value from mock2 (2)
...

IEnumerable Zip函数不能用于十进制类型,但可以用于其他类型

我猜您的数据库没有为查询返回数据。

:
void Main()
{
    IEnumerable<decimal> mock1 = new decimal[] { 1, 2, 3 };
    IEnumerable<decimal> mock2 = new decimal[] { 4, 5, 6 };
    foreach (var item in mock1.Zip(mock2, (a, b) => new { a, b }))
    {
        Console.WriteLine(item.a);
        Console.WriteLine(item.b);
        Console.Read();
    }
}
1

4

2

5

3

6

这是我的错-我有10个数据点为mockData1和mockData2,但在我的手动SQL插入期间,我不小心将所有20个数据点添加到mockData1,而没有添加到mockData2。