2010-03-21 2 views
1

я м заселения данных для различных объектов в набор списков, используя общие списки следующим образом:C# Общего список

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

Мне нужно написать эти списки в файл, у меня есть метод Util, чтобы получить значение свойств и т. д. с использованием отражения.

Что я хочу сделать, это: используя единственный способ, чтобы написать их в файлы, такие как:

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

Как я могу это сделать?

Я хочу, чтобы быть в состоянии назвать:

writeToFile(bars); 
writeToFile(foos); 

ответ

1

Вы должны смотреть в тему serialization. Существует somearticles там о том, как иметь дело с общими типами.

5

Вы можете использовать generics, чтобы вызывающий мог указать ожидаемый тип, содержащий список.

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

Хм это то, что вы получаете за вопрос по загрузке и не отвечаете какое-то время - Иаков попал туда первым. –

3

Вероятно, что-то вроде ...

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 + "']"); 

... или вы могли бы попробовать что-то вроде ...

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)); 

... или что-то ... вы получите идея.

Смежные вопросы