c # Общий список - PullRequest
       11

c # Общий список

1 голос
/ 22 марта 2010

Я заполняю данные для разных сущностей в набор списков, используя общие списки следующим образом:

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

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

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

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

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

Я хочу иметь возможность звонить:

writeToFile(bars);
writeToFile(foos);

Ответы [ 4 ]

10 голосов
/ 22 марта 2010
void writeToFile<T>(List<T> list)
{
    // Do the writing
}
5 голосов
/ 22 марта 2010

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

void writeToFile<T>(IList<T> list)
{
    ...
}
3 голосов
/ 22 марта 2010

Возможно, что-то вроде ...

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

... или как там ... вы поняли.

1 голос
/ 22 марта 2010

Вам стоит заглянуть в тему сериализации . Есть некоторые статьи о работе с универсальными типами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...