文字列のリストを int のリストに変換するためのコードを作成しようとしていました。 ConvertAllList<int> list = listOfStr.ConvertAll<int>(delegate(string s) { return ConvertStringToInt(s); });
から行を取得しました。
public static List<int> ConvertListOfStringToListOfInt(List<string> listOfStr)
{
List<int> list = listOfStr.ConvertAll<int>(delegate(string s) { return ConvertStringToInt(s); });
return list;
}
/// <summary>
/// converts the given str to integer
/// </summary>
/// <param name="str">string to be converted</param>
/// <returns>returns the int value of the given string</returns>
public static int ConvertStringToInt(string str)
{
int convertedValue = int.Parse(str);
//(int.TryParse(str, out convertedValue))
return convertedValue;
}
コードは 1 つのことを除いて正常に動作しています。
上記のメソッドの単体テストを作成しました。TestMethod
以下です
/// <summary>
///A test for ConvertListOfStringToListOfInt
///</summary>
[TestMethod()]
public void ConvertListOfStringToListOfIntTest()
{
List<string> listOfStr = new List<string> { "1", "2", "3"}; // TODO: Initialize to an appropriate value
List<int> expected = new List<int> { 1, 2, 3}; // TODO: Initialize to an appropriate value
List<int> actual;
actual = Conversions.ConvertListOfStringToListOfInt(listOfStr);
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("Verify the correctness of this test method.");
}
メソッドと期待されるリストを渡すリストに同じ値を与えましたが、タイプが異なるだけです(期待されるのは整数のリストであり、渡されるリストは文字列のリストです)。テストを実行すると、次のエラー メッセージが表示されました。
Assert.AreEqual failed. Expected:<System.Collections.Generic.List`1[System.Int32]>. Actual:<System.Collections.Generic.List`1[System.Int32]>.
まあ、型は実際には等しいので、リスト内に何か違うものがあるのではないかと思い、デバッグしました。
それは 4 であることが判明しlistOfStr.Capacity
、アイテム メンバーの [3] アイテムとして null アイテムを持っていますexpected.Capacity
。
ただし、actual.Capacity
それは 3 であり、実際には items メンバーに 3 つのアイテムがあります。
私はそれを埋める前にnew
ingしようとし、値をメソッドに追加してリストに追加するために使用しました。しかし、容量は同じです。この方法は容量が決まっているリストには使用されないため、手動で容量を設定したくありません。actual
list.Add()
expected
new
ConvertListOfStringToListOfInt
このテストに合格するにはどうすればよいですか? 容量が違うのはなぜ?また、リストの容量はどのように決定され、何に依存していますか?
これは .NET Framework 4.0 です。