Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C打印列表|每两个列表_C#_List_Foreach_Printing - Fatal编程技术网

C# C打印列表|每两个列表

C# C打印列表|每两个列表,c#,list,foreach,printing,C#,List,Foreach,Printing,我打印列表时遇到问题,因为我在两个单独的列表中有必要的信息 目前我知道如何从一个列表中打印出来,但不知道如何使用两个列表打印出来 public static void PregledSvihPolicaOsiguranja() { List<PoliceOsiguranja> lPoliceOsiguranja = DohvatiPoliceOsiguranja(); List<Klijent> lKlijent = DohvatiKlijente();

我打印列表时遇到问题,因为我在两个单独的列表中有必要的信息 目前我知道如何从一个列表中打印出来,但不知道如何使用两个列表打印出来

public static void PregledSvihPolicaOsiguranja()
{
    List<PoliceOsiguranja> lPoliceOsiguranja = DohvatiPoliceOsiguranja();
    List<Klijent> lKlijent = DohvatiKlijente();

    var table = new ConsoleTable("OIB", "Broj Police", "Vrsta Osiguranja", "Ime i prezime", "Datum pocetka", "Datum isteka", "Vrijednost");
    foreach (var PoliceOsiguranja in lPoliceOsiguranja)
    {
            table.AddRow(PoliceOsiguranja.OIB, PoliceOsiguranja.BrojPolice, PoliceOsiguranja.VrstaOsiguranja, PoliceOsiguranja.Ime + " " + PoliceOsiguranja.Prezime, PoliceOsiguranja.DatumPocetka, PoliceOsiguranja.DatumIsteka, PoliceOsiguranja.Vrijednost) ;
    }
    table.Write();
}
这一部分policosiguranja.Ime++policosiguranja.Prezime应该使用列表lkligent并从该JSON文件中打印Ime名称和Prezime姓氏

谢谢大家!

编辑:
我尝试过使用Zip,但它对我不起作用

如果您对打印客户的特定策略感兴趣,那么也许可以这样做

    foreach (var client in lKlijent)
    {
        PoliceOsiguranja policy = lPoliceOsiguranja.Where(x => x.OIB == client.OIB).FirstOrDefault();
        table.AddRow(policy.property1, policy.property2, client.property1, client.property2) ;
    }
根据数据的外观,您可能必须运行多个foreach循环。如果每个客户机都有一个策略,那么上面的方法就行了。如果每个策略有一个客户机,则可以翻转循环并使用策略作为循环,并根据正在迭代的策略查找客户机

如果每个策略都有多个客户端,那么最好使用单独的foreach循环

    foreach (var policy in lPoliceOsiguranja)
        foreach (var client in lKlijent.Where(x => x.OID == policy.OID))
            table.AddRow(policy.property1, policy.property2, client.property1, client.property2);


同样的逻辑,如果每个客户机都有多个策略,那么首先翻转循环并迭代客户机,然后迭代匹配client.OID的策略。

因为我没有太多的东西要从代码中学习,所以我将给您一个更通用的使用Zip的示例。例如,让我们假设这些是您的类

public class PoliceOsiguranja
{
    public string OIB { get; set; }
}

public class Klijent
{
    public string OIB { get; set; }
}
我们将创建一个表示组合的新类

public class Combination
{
    public PoliceOsiguranja A { get; set; }
    public Klijent B { get; set; }
}
我们将使用.Zip将您的两个列表合并为一个组合列表。假设我们从这些列表开始

public static List<PoliceOsiguranja> listA = new List<PoliceOsiguranja> 
{
    new PoliceOsiguranja{ OIB = "PoliceOsiguranja1"},
    new PoliceOsiguranja{ OIB = "PoliceOsiguranja2"},
    new PoliceOsiguranja{ OIB = "PoliceOsiguranja3"},
};
public static List<Klijent> listB = new List<Klijent> 
{
    new Klijent { OIB = "klijent1"},
    new Klijent { OIB = "klijent2"},
    new Klijent { OIB = "klijent3"}
};
如果您需要对它们进行排序,比如通过OIB,您也可以通过更改为

IEnumerable<Combination> sortedCombinedList = listA.OrderBy(a => a.OIB).Zip(listB.OrderBy(b => b.OIB), (a, b) => new Combination { A = a, B = b });

但这将取决于您的用例

你能用拉链展示一下你的尝试吗?另外,您可以使用常规for循环并使用索引…错误是什么?您是否考虑过在Klijent和Policiosiguranja类中使用重写ToString?另外,这些类有什么共同点?大量错误试图使用Zip。@Jawad类中有OIBcommon@cortex请参阅下面我的文章,了解在遍历策略列表时查找客户机信息的信息。
foreach(Combination item in combinedList)
{
    Console.WriteLine($"PoliceOsiguranja OIB = {item.A.OIB}, Klijent OIB = {item.B.OIB}");
}
IEnumerable<Combination> sortedCombinedList = listA.OrderBy(a => a.OIB).Zip(listB.OrderBy(b => b.OIB), (a, b) => new Combination { A = a, B = b });