2010-03-21 90 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); 

回答

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

您可以使用泛型来允许调用者指定列表包含的预期类型。

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

嗯,多数民众赞成在加载一个问题而不回答一段时间 - 雅各首先到那里。 – 2010-03-21 23:07:41

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

......或任何...你的理念。