繁体   English   中英

List.IndexOf 结果返回 -1

[英]List.IndexOf returning -1 as a result

所以我有一个名为“DisplayTextBlock”的函数来显示 TextBlock。 我已经列出了这个函数,但每当我尝试在该列表中查找函数索引时,我都会得到 -1。

    public void DisplayTextBlock(TextBlock block)
{
    Doing something here.        
}


int myActiveTextIndex;

    textDisplay.Add(() => DisplayTextBlock(block1 = new TextBlock("1. some text here")));
    textDisplay.Add(() => DisplayTextBlock(block2 = new TextBlock("2. some text here")));
    textDisplay.Add(() => DisplayTextBlock(block3 = new TextBlock("3.some text here")));
    textDisplay.Add(() => DisplayTextBlock(block4 = new TextBlock("4.some text here")));

List<Action> textDisplay = new List<Action>();


    myActiveTextIndex = textDisplay.IndexOf(() => DisplayTextBlock(block3));

为什么它输出-1?

代表有这种平等的概念,如文档中所述

方法和目标的相等性比较如下:

如果被比较的两个方法都是静态的并且是同一个类上的相同方法,则认为这些方法相等,目标也被认为相等。

如果被比较的两个方法是实例方法并且是同一对象上的相同方法,则认为方法相等,目标也被认为相等。

否则,方法不被认为是平等的,目标也不被认为是平等的。

您正在使用匿名方法,例如() => DisplayTextBlock(block3) ,即使匿名方法 A 与匿名方法 B 执行相同的操作(顺便说一下,您的代码中并非如此) - 它们仍被编译为不同的方法。 这意味着它们将始终违反上述比较中的same method ,并且永远不会相等。

如果您想将委托存储在某种列表中供以后检索 - 不要依赖委托相等比较 - 使用Dictionary并使用适当的键,您可以稍后通过它检索关联的委托。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM