我已经编写了一个代码,用于向checkedlistbox添加一个列表,如果列表中有相同的项目,我想检查checkedlistbox。我的代码根本没有向checkedlistBox添加任何项目。任何人都可以建议问题是什么?。
int y;
if (clb_output.Items.Count != 0){
for (y = 0; y < q.Count; y++){
for (int z = 0; z < clb_output.Items.Count; z++)
{
if (q[y].ToString() != clb_output.Items[z].ToString())
{
clb_output.Items.Add(q[y].ToString());
break;
}
else { }
}
}
}
else
{
for (int t = 0; t < q.Count;t++ )
clb_output.Items.Add(q[t].ToString());
}
答案 0 :(得分:0)
如果clb_output.Items.Count()在你的第二个for循环中为零,那么你将永远不会到达添加到该框的语句。您需要在代码开头设置断点,以查看发生的情况并修复逻辑。
int y;
if (clb_output.Items.Count != 0)
{
for (y = 0; y < q.Count; y++)
{
if (!clb_output.Items.Contains(q[y].ToString()))
{
clb_output.Items.Add(q[y].ToString());
}
}
}
else
{
for (int t = 0; t < q.Count; t++)
clb_output.Items.Add(q[t].ToString());
}
答案 1 :(得分:0)
1)请确保你的q集合不是空的
2)我通常填写这样的列表:
for (int y = 0; y < q.Count; y++)
{
if(!clb_output.Indexof(q[y].ToString.Trim.ToLower() > -1)
{
clb_output.Items.Add(q[y].ToString());
}
}
答案 2 :(得分:0)
面对这些问题时,测试驱动开发是解决问题的好方法。
首先设置要测试的类和测试(我们暂时忽略模拟和东西)
public class MyClass {
private readonly List<Item> q = new List<Item>();
private readonly List<Item> checkedItems = new List<Item>();
public ICollection<Item> Q
{
get { return q; }
}
public ICollection<Item> CheckedItems
{
get { return checkedItems; }
}
public void TransferItems() {
// todo:
}
}
public class Item { }
您可以使用Visual Studio单元测试添加测试方法,或使用类似NUnit的方法。
[TestFixture]
public class MyClassTest {
[Test]
public void NewItemsAreAddedWhenCheckedItemsIsEmpty() {
// arrange
Item expectedItem = new Item();
MyClass tester = new MyClass();
tester.Q.Add(expectedItem);
// act
tester.TransferItems();
// assert
int actualCount = tester.CheckedItems.Count;
int expectedCount = 1;
Assert.Equals(actualCount, expectedCount);
var actualItem = tester.CheckedItems[0];
Assert.AreSame(actualItem, expectedItem);
}
[Test]
public void NewItemsAreAddedWhenCheckedItemsContainsElements() {
// arrange
Item expectedItem = new Item();
MyClass tester = new MyClass();
tester.Q.Add(expectedItem);
tester.CheckedItems.Add(new Item());
// act
tester.TransferItems();
// assert
int actualCount = tester.CheckedItems.Count;
int expectedCount = 2;
Assert.Equals(actualCount, expectedCount);
var expectedContains = tester.CheckedItems.Contains(expectedItem);
Assert.IsTrue(expectedContains);
}
}
如果这样,您只需运行测试,看到它失败并相应地更改您的代码。
public class MyClass {
private readonly List<Item> q = new List<Item>();
private readonly List<Item> checkedItems = new List<Item>();
public ICollection<Item> Q
{
get { return q; }
}
public ICollection<Item> CheckedItems
{
get { return checkedItems; }
}
public void TransferItems() {
IEnumerable<Item> itemsToAdd = q.Where(item => !checkedItems.Contains(item));
checkedItems.AddRange(itemsToAdd);
}
}