Что еще вернуть, когда есть только одна вещь, чтобы вернуться? - PullRequest
0 голосов
/ 22 февраля 2020
public static Window GetMainWindow()
     {
        foreach (Window window in Application.Current.Windows)
        {
            if (window.GetType() == typeof(MainWindow))
            {
                return (window as MainWindow);
            }
        }
        return new Window(); //useless?
     }

Как видите, я возвращаю MainWindow из своего приложения, которое всегда будет работать. Если я не добавлю return new Window(), то, очевидно, он будет жаловаться на то, что не все пути кода возвращают значение. Теперь мой вопрос: есть ли лучший способ решить эту проблему, так как мне кажется, что возвращать новое окно довольно бесполезно?

Спасибо

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Вы можете вернуть null или бросить Exception.

. Кроме того, я нашел избыточный тип приведений Window к MainWindow в вашем коде. В случае возврата Window Type вам это не нужно. Вернемся вместо MainWindow.

public static MainWindow GetMainWindow()
{
    var mainWindow = Application.Current.MainWindow as MainWindow;

    // Optional if block that checks for null and throws an exception.
    //
    if (mainWindow == null)
    {
        throw new Exception("MainWindow not found");
    }

    return mainWindow;
} 
0 голосов
/ 22 февраля 2020

Поскольку ваш метод называется GetMainWindow, другие люди могут подумать, что целью этого метода является возвращение MainWindow, в противном случае MainWindow не найдено. Это не фабричный метод , который должен создавать какой-то объект и возвращать его.

Поэтому лучше создать исключение, если MainWindow не найден.

Там это хорошая статья, в которой говорится, что лучше создать исключение, когда что-то не так, go, потому что легче определить, что это за ошибка :

Хорошая новость для «System.Exception как uber-кода ошибки» является то, что относительно легко определить, какой тип ошибки произошел из информации строгого типа, которую предоставляет CLR, что означает, что шаблон «деконструировать расширенную информацию в более простую версию» I только что упомянутое вряд ли произойдет.

...