【发布时间】:2021-02-12 15:54:12
【问题描述】:
所以我有一个名为“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?
【问题讨论】:
-
我从不相信 Action 或 Func 实例相等比较的结果。即使它们看起来相同,但通常会导致“不一样”。
-
这些动作不一样,因为它们做不同的事情——第一个在调用方法之前将一些东西分配给变量,而第二个只是调用方法。因此,编译器将为每个
Action委托生成 2 个不同的方法。 -
我认为伊万的评论指出了问题所在,所以删除了我自己的答案
-
谢谢 Ivan 和 MyBug。非常感谢您的帮助,我知道我做错了什么。
-
你在最后做了一个新列表,所以根除原来的ergo,里面什么都没有