在我的很多地方的项目中,我正在处理一个csv文件。这些文件包含不同的数据 - 一些包含成分,一些员工,一些书籍等。
所以,我有这种情况:
我想创建一个通用方法,作为输入参数将包含文件路径,规则以及返回的内容。
规则将是一个键值对列表,它将告诉该行的哪个索引包含db的哪个属性。因此,对于csv文件1,规则列表将是这样的:
<Enum.bookId, 0> --in each row, the string with index 0 in the string after splitting by ";", has the id of the book
<Enum.bookName, 1>
<Enum.bookAuthor, 2>
有什么问题,这个方法应该以某种方式为上面提到的3个csv文件中的每一个返回不同的对象。因此对于文件1,我在db中有一个名为Book的表,因此泛型方法应该返回一个书列表。对于csv文件2,它应该返回一个成分列表等。这个方法将从不同的类调用,所以我认为它应该有一个输入参数,以某种方式告诉它应该返回什么。或者可能有输入参数T.我该怎么办?
答案 0 :(得分:0)
您需要将类型T
指定为泛型方法声明的一部分,并在调用时传递正确的类型。
例如声明如下:
public List<T> ParseFile<T>(string filePath)
{
...
}
并称之为:
var books = ParseFile<Book>("path of books.csv");
但是一旦你意识到你必须将类型作为类型参数传递,你可能也会意识到这样做会使方法变得非常通用。
您可能也应该明确:
public List<Book> ParseBookFile(string filePath)
{
...
}
如果您尝试从解析器返回object
,那么您最终还是必须在某些时候将其转换为正确的类型,因此它并没有给您带来太大的好处。