我遇到了 Jon Skeet 发布以下内容的帖子:
您不能使用任何参数化构造函数。如果您有“where T : new()”约束,则可以使用无参数构造函数。
我有以下方法:
public T ReturnReader<T>(String filePath) where T : TextReader, new()
{
return new T(filePath);
}
这违反了他上面提到的内容。我需要上述方法才能返回 StreamReader (生产代码)和 StringReader (单元测试目的)。据我所知,streamReader 不包含无参数构造函数,因此我无法创建无参数实例,然后在调用方法中将 filePath 分配给它。
有人看到解决方案吗?
谢谢你的时间!
编辑:原始方法,A 和 B
/// <summary>
/// Ensures number of columns stated == number of columns in file.
/// </summary>
/// <param name="errorMessageList">A running list of all errors encountered.</param>
public static void ValidateNumberOfColumns(string filePath, int userSpecifiedColumnCount, List<String> errorMessageList)
{
int numberOfColumnsInFile = GetNumberOfColumnsInFile(filePath, errorMessageList);
if (userSpecifiedColumnCount != numberOfColumnsInFile) errorMessageList.Add("Number of columns specified does not match number present in file.");
}
public static int GetNumberOfColumnsInFile(string filePath, List<String> errorMessageList)
{
int numberOfColumns = 0;
string lineElements = null;
try
{
using (StreamReader columnReader = new StreamReader(filePath))
{
lineElements = columnReader.ReadLine();
string[] columns = lineElements.Split(',');
numberOfColumns = columns.Length;
}
return numberOfColumns;
}
catch (Exception ex)
{
errorMessageList.Add(ex.Message);
return -1;
}
}