C#将LINQ表打印到控制台而不指定属性

时间:2018-05-28 09:10:58

标签: c# linq

我想创建一个方法来将LINQ(表)及其所有属性和值打印到控制台。

我目前正试图通过var来做到这一点 我认为出错的是我尝试发送给方法的参数类型。
如果可能,这应该是printtabel()所以我可以在任何类中使用此方法名单。 (不确定这是否可行)

问题在于namespace LINQ { class Program { public class Bier { public int BierNr { get; set; } public string Biernaam { get; set; } public float Alcohol { get; set; } public Brouwer Brouwer { get; set; } //associatie met een brouwer public override string ToString() { return Biernaam + ": " + Alcohol + "% alcohol"; } } public class Brouwer { public int BrouwerNr { get; set; } public string Brouwernaam { get; set; } public bool Belgisch { get; set; } public List<Bier> Bieren { get; set; } public override string ToString() { return "Brouwerij " + Brouwernaam + " (" + (Belgisch ? "Belgisch" : "Niet Belgisch") + ")"; } } public class Brouwers { public List<Brouwer> GetBrouwers() { List<Brouwer> lijst = new List<Brouwer>(); Brouwer palm = new Brouwer { BrouwerNr = 1, Brouwernaam = "Palm", Belgisch = true }; palm.Bieren = new List<Bier> { new Bier {BierNr=1,Biernaam="Palm Dobbel", Alcohol=6.2F, Brouwer=palm}, new Bier {BierNr=2, Biernaam="Palm Green", Alcohol=0.1F, Brouwer=palm}, new Bier {BierNr=3, Biernaam="Palm Royale", Alcohol=7.5F, Brouwer=palm} }; lijst.Add(palm); Brouwer hertogJan = new Brouwer { BrouwerNr = 2, Brouwernaam = "Hertog Jan", Belgisch = false }; hertogJan.Bieren = new List<Bier> { new Bier{ BierNr=4, Biernaam="Hertog Jan Dubbel", Alcohol=7.0F, Brouwer=hertogJan}, new Bier{ BierNr=5, Biernaam="Hertog Jan Grand Prestige", Alcohol=10.0F, Brouwer=hertogJan} }; lijst.Add(hertogJan); Brouwer inBev = new Brouwer { BrouwerNr = 3, Brouwernaam = "InBev", Belgisch = true }; inBev.Bieren = new List<Bier> { new Bier { BierNr=6, Biernaam="Belle-vue kriek L.A", Alcohol=1.2F, Brouwer=inBev}, new Bier { BierNr=7, Biernaam="Belle-vue kriek", Alcohol=5.2F, Brouwer=inBev}, new Bier { BierNr=8, Biernaam="Leffe Radieuse", Alcohol=8.2F,Brouwer=inBev}, new Bier { BierNr=9, Biernaam="Leffe Triple", Alcohol=8.5F,Brouwer=inBev} }; lijst.Add(inBev); //return new List<Brouwer> { palm, hertogJan, inBev }; return lijst; } } static void Main(string[] args) { var brouwers = new Brouwers().GetBrouwers(); var belgischeBrouwerijenMet3Bieren = from brouwer in brouwers where brouwer.Belgisch && brouwer.Bieren.Count == 3 select brouwer; foreach (var brouwer in belgischeBrouwerijenMet3Bieren) Console.WriteLine(brouwer.Brouwernaam); var bieren = from brouwer in brouwers from bier in brouwer.Bieren select bier; string vorigeBrouwer = ""; foreach (var bier in bieren) { if (bier.Brouwer.ToString() != vorigeBrouwer) { Console.WriteLine(bier.Brouwer); vorigeBrouwer = bier.Brouwer.ToString(); } Console.WriteLine($"\t {bier.ToString()}"); } Console.WriteLine(printtabel(belgischeBrouwerijenMet3Bieren)); Console.ReadLine(); } public string printtabel(IEnumerable<Brouwer> response) { StringBuilder sb = new StringBuilder(); foreach (PropertyInfo prop in response.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { object value = prop.GetValue(response, new object[] { }); sb.AppendLine($"{prop.Name} = {value}"); } return sb.ToString(); } } } 方法。

我从:  dup

web

1 个答案:

答案 0 :(得分:0)

  

错误CS0120非静态字段,方法或属性需要对象引用&#39; Program.printtabel(IEnumerable)&#39; LINQ 204活动

你可以写一下来解决它:

public static string printtabel(IEnumerable<Brouwer> response)

您正在从静态方法调用非静态方法。设置printtabel静态,此错误应该消失。