C# 当只有一件东西需要归还时,还需要归还什么?
如您所见,我从应用程序返回主窗口,它将始终工作。如果我没有添加returnnew窗口,那么它显然会抱怨不是所有的代码路径都返回值。现在我的问题是,有没有更好的方法来解决这个问题,因为我觉得返回一个新窗口是非常无用的 谢谢因为您的方法名为GetMainWindow,所以其他人可能会认为此方法的目的是返回MainWindow,否则找不到MainWindow。它不是应该创建一些对象并返回它的对象 所以,如果找不到MainWindow,最好抛出一个异常 有一篇好文章说,当出现问题时最好抛出异常,因为它: 对于系统来说,好消息是,作为优步错误代码的例外是 相对来说,要确定哪种错误在测试中失败比较容易 CLR提供的强类型信息,这意味着 将丰富的信息解构为更简单的版本模式I 刚才提到的不太可能发生 您可以返回null或引发异常 另外,我在代码中发现了一个冗余的类型强制转换窗口到MainWindow。如果返回窗口类型,则不需要它。让我们返回主窗口 公共静态主窗口GetMainWindow { var mainWindow=Application.Current.mainWindow作为主窗口; //可选的if块,用于检查null并引发异常。 // 如果mainWindow==null { 未找到抛出新异常主窗口; } 返回主窗口; }C# 当只有一件东西需要归还时,还需要归还什么?,c#,wpf,return,C#,Wpf,Return,如您所见,我从应用程序返回主窗口,它将始终工作。如果我没有添加returnnew窗口,那么它显然会抱怨不是所有的代码路径都返回值。现在我的问题是,有没有更好的方法来解决这个问题,因为我觉得返回一个新窗口是非常无用的 谢谢因为您的方法名为GetMainWindow,所以其他人可能会认为此方法的目的是返回MainWindow,否则找不到MainWindow。它不是应该创建一些对象并返回它的对象 所以,如果找不到MainWindow,最好抛出一个异常 有一篇好文章说,当出现问题时最好抛出异常,因为它:
抛出异常。如果您希望循环总能找到窗口,但不知何故它却找不到,那么它会以惊人的方式让您知道发生了严重错误。@FarhadJabiyev如果您想要好的代码,这可以接受吗?因为如果是,那么一切都好。它应该返回Application.Current.MainWindow作为MainWindow;当然,在方法调用之后,应该检查结果是否为null。。。不,那么我认为可以肯定地说,当调用GetMainWindow时,主窗口将始终存在。因此,不要返回null。抛出异常,因为它是异常的。让它死掉一个可怕的死期,这样你就知道如何修复问题,而不是让它默默地不工作,或者抛出更难追踪的无关异常,例如NullReferenceException。我甚至会为此定义一个自定义异常,这样,毫无疑问,正是这个问题发生了。未处理的MainWindowNotFoundException?我知道发生在哪里@否决投票人否决投票的理由是什么?如果能在我的答复中知道哪些方面需要改进,那将非常有帮助。谢谢。我不是一个悲观的投票者,但我猜这是因为你没有回答OP的问题,但建议毫无理由地阅读一些关于例外的内容。我对你的答案投了赞成票,因为它在当前环境下可能有用。感谢您提供的链接。请选择更具体的异常类型,可以是自定义异常,也可以是InvalidOperationException。@克莱门斯同意,谢谢您的编辑。顺便说一句,我更喜欢接近OP的代码。OP的代码毫无意义。更好地展示实际应该如何做。您还可以更加强调这一点,即两种方法——返回null和抛出异常——都是完全有效的,没有一种方法比这更好。这完全取决于选择哪个应用程序逻辑。罗杰。非常感谢。
public static Window GetMainWindow()
{
foreach (Window window in Application.Current.Windows)
{
if (window.GetType() == typeof(MainWindow))
{
return (window as MainWindow);
}
}
return new Window(); //useless?
}