2015-04-26 1 views
0

J'ai une liste qui relie certains objets qui ont 2 propriétés de chaîne et 2 int. J'aimerais pouvoir afficher les 4 propriétés d'un objet en fonction du contenu de sa première propriété. Par exemple: Je souhaite afficher toutes les données de tous les éléments de la liste dont la première propriété est "Mozart". Merci d'avance!Quelle est la meilleure façon d'afficher les éléments de liste sur la console en fonction de la valeur des propriétés des éléments?

J'ai une classe vraiment basique qui a 4 propriétés, 2 chaînes, et 2 ints, tous ont leurs getters/setters respectifs mis au public. J'ai également une liste qui contient certains de ces objets.

Mon code ressemble à ceci.

Console.WriteLine("Give in the name you want to search for!"); 
string s = Console.ReadLine(); 

Après cela, je voudrais vérifier si la première propriété est « s », et si elle est, afficher toutes les données de cet objet donné à l'écran.

+0

Avez-vous déjà essayé quelque chose? L'utilisation de boucles ('foreach') et d'opérateurs conditionnels (' if') pourrait s'avérer utile. –

+0

Je n'ai encore rien essayé, je suis relativement nouveau sur les listes, donc je ne sais pas vraiment d'où elles viennent. – user3576186

+0

Vous pouvez commencer par lire à leur sujet dans la documentation, puis essayer du code pour résoudre le problème que vous rencontrez et, enfin, si vous êtes incapable de le faire, montrez vos progrès jusqu'ici ici afin que nous puissions vous aider. –

Répondre

1

Jetez un oeil à cela et laissez-moi savoir si vous êtes coincé avec tout ça :)

void Main() 
{ 
    List<Music> myMusic = new List<Music> 
    { 
     new Music 
     { 
      Artist = "Mozart", 
      Album = "Mozarts amazing album", 
      TotalTracks = int.MaxValue, 
      Etc = int.MinValue 
     }, 
     new Music 
     { 
      Artist = "Foo", 
      Album = "Bar", 
      TotalTracks = int.MaxValue, 
      Etc = int.MinValue 
     }, 
    }; 


    var mozartsMusic = myMusic.Where(music => music.Artist == "Mozart") 
           .ToList(); 

    mozartsMusic.ForEach(Console.WriteLine); 

} 

public class Music 
{ 
    public string Artist { get; set; } 
    public string Album { get; set; } 
    public int TotalTracks { get; set; } 
    public int Etc { get; set; } 

    public override string ToString() 
    { 
     return string.Join("\n",this.GetType().GetProperties().Select(p=>string.Format("{0} {1}", p.Name, p.GetValue(this)))); 
    } 
} 

enter image description here

+0

Oui cela fonctionne aussi, mon erreur était que j'ai essayé d'utiliser obj au lieu de var dans le foreach. – user3576186

0

Quelque chose comme ça ferait l'affaire:

class Datum 
{ 
    public string Composer { get; set; } 

    ///wharever other proerties you need 

    public string DisplayOutput() 
    { 
     return this.Composer //+ however you want it displayed 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 

     List<Datum> data = new List<Datum>(); 

     foreach (var outputLine in data.Where(d => d.Composer == "Mozart").Select(d=>d.DisplayOutput()) 
     { 
      Console.WriteLine(outputLine); 
     } 

    } 
} 
+0

Absolument fait, merci! – user3576186

0

Cela devrait être un moyen possible de le faire:

class Composer 
{ 
    public Composer(string lastName, string firstName, int year, int month) 
    { 
     LastName = lastName; 
     FirstName = firstName; 
     YearOfBirth = year; 
     MonthOfBirth = month; 
    } 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public int YearOfBirth { get; set; } 
    public int MonthOfBirth { get; set; } 
    public override string ToString() 
    { 
     return string.Format("{0} {1} {2} {3}", LastName, FirstName, YearOfBirth.ToString(), MonthOfBirth.ToString()); 
    } 
} 


class Program 
{ 
    private static new List<Composer> composerList = new List<Composer>(); 

    static void Main(string[] args) 
    { 
     composerList.Add(new Composer("Mozart", "Wolfgang", 1756, 1)); 
     composerList.Add(new Composer("Vivaldi", "Antonio", 1678, 3)); 

     Console.WriteLine("Please enter a name you want to search for!"); 
     string name = Console.ReadLine(); 
     ShowComposerData(name); 
    } 


    private static void ShowComposerData(string name) 
    { 
     foreach(Composer comp in composerList) 
     { 
     if(comp.LastName == name) 
     { 
      Console.WriteLine(comp.ToString()); 
     } 
     } 
    } 
} 
+0

Cela fonctionne aussi, merci! – user3576186