Переопределение проблемы Условных операторов C#

У Вас почти есть он! способ сделать вложенные понимания списка состоят в том, чтобы поместить эти for операторы в том же порядке, как они вошли бы регулярный вложенный for операторы.

Таким образом, это

for inner_list in outer_list:
    for item in inner_list:
        ...

соответствует

[... for inner_list in outer_list for item in inner_list]

, Таким образом, Вы хотите

[image for menuitem in list_of_menuitems for image in menuitem]

17
задан Glorfindel 15 April 2019 в 01:49
поделиться

5 ответов

Вы перегрузили ! = ?

52
ответ дан 30 November 2019 в 10:21
поделиться

Не знаю почему. Но уверены ли вы, что работающее приложение скомпилировано с использованием кода, который вы выполняете. Я видел такие вещи, когда код отличается от того, что на самом деле выполняется.

3
ответ дан 30 November 2019 в 10:21
поделиться

Вы уверены, что действительно находитесь на выделенной вами линии? Вы можете щелкнуть мышью в окне стека вызовов и сделать любую часть стека вызовов «текущей» строкой в ​​том смысле, что вы можете получить там значения переменных и т. Д.

Дело в том, что, возможно, EndedUsingApplication устанавливает ActiveApplication на null, так что ActiveApplication не было null при оценке if, но теперь оно равно null, когда вы оцениваете его в отладчике.

Вы установили точку останова на строку EndedUsingApplication (ActiveApplication), чтобы убедиться, что ActiveApplication имеет значение null, прежде чем выполнять эту строку?

1
ответ дан 30 November 2019 в 10:21
поделиться

Является ли ваша программа многопоточной?

Я встречал ситуации, когда я проверял значение, а затем пытался использовать его только для того, чтобы обнаружить, что оно изменилось. Случилось так, что другой поток изменил значение после того, как я его проверил, но до того, как я его использовал.

1
ответ дан 30 November 2019 в 10:21
поделиться

I think a better approach is to use Object.ReferenceEquals as it is more explicit:

public static bool operator ==(ActiveApplication a, ActiveApplication b)
     {
     // same reference so equals is true - will be true for null == null
     if (object.ReferenceEquals(a, b))
        return true;

     // one is null and the other is not
     if (object.ReferenceEquals(a, null) || object.ReferenceEquals(b, null))
        return false;

     // dealt with all combinations of null - compare fields
     return a.process_name == b.process_name && a.window_title == b.window_title;
     }

  public static bool operator !=(ActiveApplication a, ActiveApplication b)
     {
     return !(a == b);
     }
1
ответ дан 30 November 2019 в 10:21
поделиться