我使用此代码加载数据并将其转换为我使用泛型方法获取的类型:
public List<TResult> LoadFromeStreamFile<TResult>(string Location)
{
List<TResult> result = new List<TResult>();
StreamReader reader = new StreamReader(Location);
while (!reader.EndOfStream)
{
result.Add((TResult)reader.ReadLine());
}
reader.Close();
return result;
}
但我在此代码中遇到错误result.Add((TResult)reader.ReadLine());
如何将string
投射到TResult
??
答案 0 :(得分:8)
除非TResult
是object
或string
,否则该演员不能可能工作。假设你实际试图创建类似实体的东西,我会要么建议你传入Func<string, TResult>
或(最好)你使用LINQ - 所以你根本不需要这个方法:
var list = File.ReadLines(location)
.Select(line => new SomeEntity(line))
.ToList();
如果您仍然需要该方法,则可以使用:
public static List<TResult> LoadFromFile<TResult>(string location,
Func<string, TResult> selector)
{
return File.ReadLines(location).Select(selector).ToList();
}
......但我不确定它是否值得。我想如果你这么做的话......
(另一方面,当你做需要从文件中读取时,你应该使用using
语句,这样即使抛出异常,你的文件句柄也会被关闭。 )
答案 1 :(得分:-1)
您可以通过在“TResult”中实现显式类型转换运算符来实现此目的。 从对象到TResult的显式转换。
这实际上“在某种程度上”与在“TResult”中具有能够从给定对象创建构造函数(具有一些假设)的构造函数相同。