【发布时间】:2013-12-03 22:03:08
【问题描述】:
这是我现在做的方式,但我不确定它是否效率低,因为运行时间是 O(n):
foreach (Window window in Application.Current.Windows)
{
if (window.GetType() == typeof(TransactionsWindow))
{
this.Owner = window;
}
}
有没有办法让它保持不变或更有效的方法?基本上,我试图确认我是否以正确的方式做事——一直在努力改进。窗口被按钮事件打开,所以我想知道是否有办法找出从哪个窗口调用事件并将该窗口分配为所有者,而不必搜索所有打开的窗口并硬编码所有者类型。
【问题讨论】:
-
或者直接写
Owner = Application.Current.Windows.OfType<TransactionsWindow>().FirstOrDefault();。 -
哇!这绝对比用
break;编写foreach 循环要短。 Linq 很棒。 -
使用这个通常是不好的做法,但不是出于性能原因,而是因为它会创建脆弱的代码。
-
@Servy 哪一个,我发布的代码还是 Clemens?你所说的“脆弱代码”是什么意思?
-
@Noobacode 两者;一般使用
Application.Current.Windows。从概念上讲,您只是试图通过查看所有窗口来弥补您“丢失”窗口正确所有者的事实。所有者应该在创建时设置,而不是在任何地方。