通用转换不起作用

时间:2011-12-11 07:31:01

标签: c# .net generics c#-4.0 generic-programming

我使用此代码加载数据并将其转换为我使用泛型方法获取的类型:

    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 ??

2 个答案:

答案 0 :(得分:8)

除非TResultobjectstring,否则该演员不能可能工作。假设你实际试图创建类似实体的东西,我会要么建议你传入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的显式转换。

MSDN Reference

这实际上“在某种程度上”与在“TResult”中具有能够从给定对象创建构造函数(具有一些假设)的构造函数相同。