JonSkeetが次のように投稿した投稿に出くわしました。
パラメーター化されたコンストラクターは使用できません。「whereT: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;
}
}