2016-03-10 125 views
-1
if (this.Handle != hwnd && (Constants.GetWindowLongA(hwnd, Constants.GWL_STYLE) & Constants.TARGETWINDOW) == Constants.TARGETWINDOW) 
{ 
    StringBuilder sb = new StringBuilder(100); 
    Constants.GetWindowText(hwnd, sb, sb.Capacity); 

    Window t = new Window(); 
    t.Handle = hwnd; 
    t.Title = sb.ToString(); 
    windows.Add(t); 
} 

我想检查一下,如果item变量(t)已经在列表窗口中不再添加它。在行t.Title = sb.ToString();后面检查它是否不存在,然后添加它。我如何检查一个项目是否已经存在于列表中?

+5

那么你只是*创建*'Window',所以在列表中不会有对该对象的引用。你真的*试图找到什么?是否已经有一个窗口具有相同的句柄?有相同的标题? –

+0

检查是否存在相同的句柄。有没有可能的方式,多于一个窗口将具有相同的句柄? –

回答

2
if(!windows.Any(window=>window.Handle == t.Handle)){ 
    windows.Add(t); 
} 

或者,更好的是,检查在方法的开始(虽然我承认我不知道它在做什么。)

if(windows.Any(window=>window.Handle == hwnd)) return; 
2

你试试Contains方法?

if (!windows.Contains(t)) { windows.Add(t) } 

这可能工作。

+0

这是行不通的,因为'Contains'检查引用是否相等;他每次都创建一个新对象,所以'Contains'永远不会返回'true'。 – Setsu

相关问题