Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# Console.Clear()停止方法执行(未达到IOException)_C#_Ioexception_Windows Console - Fatal编程技术网

C# Console.Clear()停止方法执行(未达到IOException)

C# Console.Clear()停止方法执行(未达到IOException),c#,ioexception,windows-console,C#,Ioexception,Windows Console,我有一个非常奇怪的行为,从这个方法: public T NavigateTo<T>() where T : Page { SetPage<T>(); Console.Clear(); CurrentPage.Display(); return CurrentPage as T; } 发件人: 我是按照作者在自述中的要求这样做的。正如你们看到的,我正在设置DoLinking属性,这

我有一个非常奇怪的行为,从这个方法:

    public T NavigateTo<T>() where T : Page
    {
        SetPage<T>();

        Console.Clear();
        CurrentPage.Display();

        return CurrentPage as T;
    }
发件人:

我是按照作者在自述中的要求这样做的。正如你们看到的,我正在设置DoLinking属性,这是不可为空的。(我遇到的错误是DoLinking未经设计,因此我的工作流没有按预期执行)

我在调试和发布版本时遇到了这种情况。我在.NET4.6.1上

编辑:

我没有意识到Intellisense的例外。但我在“异常设置”窗口中切换了此异常:

由@stimms的答案建议的代码:


但这更奇怪,因为任何异常都会被抛出。

在某些情况下,console.clear会抛出IOException

我敢打赌,Console.Clear正在抛出一个未被捕获的
IOException
。关于Console.Clear()的官方指导是,您应该在try/catch块中扭曲它的使用

public T NavigateTo<T>() where T : Page
{
    SetPage<T>();

    try{
      Console.Clear();
    }catch(IOException ex){
      //do something
    }
    CurrentPage.Display();

    return CurrentPage as T;
}
public T NavigateTo(),其中T:Page
{
SetPage();
试一试{
Console.Clear();
}捕获(IOEX异常){
//做点什么
}
CurrentPage.Display();
将当前页面返回为T;
}

尽管我收到了两张反对票,但我仍然相信(正如我所见,人们并不理解)这是一个bug(因此我在上创建了一个问题)

因此,为了解决这个问题,我将
DoLinking
变量从
ForkSyncing
类更改为静态类

然后,我做了以下工作:

AddPage(new MainPage(this,
            new Option("Fork Syncing (complete process)", () =>
            {
                ForkSyncing.DoLinking = null;
                NavigateTo<ForkSyncing>();
            }),
            new Option("Fork Syncing (only cloning)", () =>
            {
                ForkSyncing.DoLinking = true;
                NavigateTo<ForkSyncing>();
            }),
            new Option("Fork Syncing (only linking)", () =>
            {
                ForkSyncing.DoLinking = false;
                NavigateTo<ForkSyncing>();
            }),
            new Option("Exit", () => Environment.Exit(0))));
AddPage(新的主页面),
新选项(“Fork同步(完整过程)”,()=>
{
ForkSyncing.DoLinking=null;
导航到();
}),
新选项(“Fork同步(仅克隆)”,()=>
{
ForkSyncing.DoLinking=true;
导航到();
}),
新选项(“Fork同步(仅链接)”,()=>
{
ForkSyncing.DoLinking=false;
导航到();
}),
新选项(“Exit”,()=>Environment.Exit(0));

因此,如果我在调用
NavigateTo()
之前设置它,我就不会有这个问题。

您没有使用控制台应用程序,因此它不会清除控制台,而是抛出一个Exception@Ksv3n正如你在我链接的QuickFork回购上看到的那样,我正在使用一个控制台应用程序。我尝试了你的建议,但这导致了我的一个奇怪行为。请看我上面编辑的问题。
AddPage(new MainPage(this,
            new Option("Fork Syncing (complete process)", () =>
            {
                ForkSyncing.DoLinking = null;
                NavigateTo<ForkSyncing>();
            }),
            new Option("Fork Syncing (only cloning)", () =>
            {
                ForkSyncing.DoLinking = true;
                NavigateTo<ForkSyncing>();
            }),
            new Option("Fork Syncing (only linking)", () =>
            {
                ForkSyncing.DoLinking = false;
                NavigateTo<ForkSyncing>();
            }),
            new Option("Exit", () => Environment.Exit(0))));