2010-03-21 7 views
1

Je suis peuplant des données pour les différentes entités en ensemble de listes à l'aide de listes génériques comme suit:C# Liste générique

List<Foo> foos .. 
List<Bar> bars .. 

Je dois écrire ces listes dans un fichier, j'ai une méthode util pour obtenir les valeurs de propriétés, etc. en utilisant la réflexion.

Ce que je veux faire est la suivante: en utilisant une seule méthode pour écrire ces derniers dans des fichiers tels que:

void writeToFile(a generic list) 
{ 
    //Which i will write to file here. 
} 

Comment puis-je faire cela?

Je veux pouvoir appeler:

writeToFile(bars); 
writeToFile(foos); 

Répondre

10
void writeToFile<T>(List<T> list) 
{ 
    // Do the writing 
} 
5

Vous pouvez utiliser des génériques pour autoriser l'appelant à spécifier le type attendu de la liste.

void writeToFile<T>(IList<T> list) 
{ 
    ... 
} 
+0

Hmm c'est ce que vous obtenez pour charger une question et ne pas répondre pendant un moment - Jacob est arrivé en premier. –

3

Probablement quelque chose comme ...

private void WriteToFile<T>(
    IEnumerable<T> elementsToWrite, 
    Func<T, string> convertElementToString) { 
    foreach (var element in elementsToWrite) 
    { 
    var stringRepresentation = convertElementToString(element); 
    // do whatever other list-stuff you need to do 
    } 
} 

// called like so... 
WriteToFile(listOfFoo, foo => foo.FP1 + ", " + foo.FP2 + " = " foo.FP3); 
WriteToFile(listOfBar, bar => bar.BP1 +"/"+ bar.BP2 + "[@x='" + bar.BP3 + "']"); 

... ou vous pouvez essayer quelque chose comme ...

private void WriteToFile<T>(
    IEnumerable<T> elementsToWrite, 
    Action<T, TextWriter> writeElement) { 
    var writer = ...; 

    foreach (var element in elementsToWrite) 
    { 
    // do whatever you do before you write an element 
    writeElement(element, writer); 
    // do whatever you do after you write an element 
    } 
} 

// called like so... 
WriteToFile(listOfFoo, (foo, writer) => 
    writer.Write("{0}, {1} = {2}", foo.FP1, foo.FP2, foo.FP3)); 
WriteToFile(listOfBar, (bar, writer) => 
    writer.Write("{0}/{1}[@x='{2}']", bar.BP1, bar.BP2, bar.BP3)); 

... ou quoi que ... vous obtenez le idée.