Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当只有一件东西需要归还时,还需要归还什么?_C#_Wpf_Return - Fatal编程技术网

C# 当只有一件东西需要归还时,还需要归还什么?

C# 当只有一件东西需要归还时,还需要归还什么?,c#,wpf,return,C#,Wpf,Return,如您所见,我从应用程序返回主窗口,它将始终工作。如果我没有添加returnnew窗口,那么它显然会抱怨不是所有的代码路径都返回值。现在我的问题是,有没有更好的方法来解决这个问题,因为我觉得返回一个新窗口是非常无用的 谢谢因为您的方法名为GetMainWindow,所以其他人可能会认为此方法的目的是返回MainWindow,否则找不到MainWindow。它不是应该创建一些对象并返回它的对象 所以,如果找不到MainWindow,最好抛出一个异常 有一篇好文章说,当出现问题时最好抛出异常,因为它:

如您所见,我从应用程序返回主窗口,它将始终工作。如果我没有添加returnnew窗口,那么它显然会抱怨不是所有的代码路径都返回值。现在我的问题是,有没有更好的方法来解决这个问题,因为我觉得返回一个新窗口是非常无用的

谢谢

因为您的方法名为GetMainWindow,所以其他人可能会认为此方法的目的是返回MainWindow,否则找不到MainWindow。它不是应该创建一些对象并返回它的对象

所以,如果找不到MainWindow,最好抛出一个异常

有一篇好文章说,当出现问题时最好抛出异常,因为它:

对于系统来说,好消息是,作为优步错误代码的例外是 相对来说,要确定哪种错误在测试中失败比较容易 CLR提供的强类型信息,这意味着 将丰富的信息解构为更简单的版本模式I 刚才提到的不太可能发生

您可以返回null或引发异常

另外,我在代码中发现了一个冗余的类型强制转换窗口到MainWindow。如果返回窗口类型,则不需要它。让我们返回主窗口

公共静态主窗口GetMainWindow { var mainWindow=Application.Current.mainWindow作为主窗口; //可选的if块,用于检查null并引发异常。 // 如果mainWindow==null { 未找到抛出新异常主窗口; } 返回主窗口; }
抛出异常。如果您希望循环总能找到窗口,但不知何故它却找不到,那么它会以惊人的方式让您知道发生了严重错误。@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?
     }