委托方法返回奇怪的结果

时间:2015-04-08 20:43:34

标签: c#

        delegate bool CheckList(int lowIndex, List<int> list);
    public BO2()
    {
        InitializeComponent();
    }

    private void BO2_Load(object sender, EventArgs e)
    {
        List<int> randList = new List<int>() { 3, 4, 5, 6, 7, 8, 9, 10 };

        CheckList HasDuplicate = (int lowIndex, List<int> list) =>
            {
                Predicate<int> criteria = x => x == lowIndex;
                int topIndex = list.FindIndex(criteria);
                List<int> duplicateList = new List<int>(list);

                for (int i = topIndex; i < (list.Count - topIndex); i++)
                {
                    if (list[i] == duplicateList[i])
                    {
                        return true;
                    }
                }

                return false;
            };

        MessageBox.Show("Has copy: " + HasDuplicate.Invoke(5, randList));

我尝试制作代理功能,以查看列表是否有两个等效值。如果有,则该函数将返回true,否则返回false。我在8分钟内编写了该功能仅用于测试目的,因为这种方法在某些情况下对我有用,这就是容易出错的原因:&#39; D

问题:该函数总是返回true,如果 randList 中有7对,则结果始终相同,为true。

注意:如果您想知道lowIndex的含义是什么,它会指定从列表开始搜索的索引。示例:lowIndex = 5,该函数将在列表中找到5的索引,并在该点之后开始搜索重复项。 :)

我不知道为什么每次都会返回真实,我不想要一个解决方法,无论是答案还是答案。解决方法或只回答。

问候,TuukkaX。

2 个答案:

答案 0 :(得分:1)

您正在使用duplicatedList初始化list。这意味着它们将具有相同的元素,因此list[i] == duplicateList[i]始终为真

答案 1 :(得分:0)

以下是我为解决问题所做的代码,如果有人需要它,因为我之前没有提供它。

            delegate bool CheckList(int lowIndex, List<int> list);
            CheckList HasDuplicate = (List<dynamic> list, int item) =>
            {
                if (list.Contains(item))
                {
                    list.Remove(item);
                    return list.Contains(item) ? true : false;
                }

                return false;
            };

类型基本上可以是任何类型,例如动态