小编J. *_*Doe的帖子

为什么迭代变量在for循环之后仍然存在?

我一直在阅读一些C#面试问题,并找到了一个关于代表的流行问题的排列,其代码让我困惑.

问题是:

预测下面代码的输出.

delegate void Iterator();

static void Main(string[] args)
{
    List<Iterator> iterators = new List<Iterator>();
    for (int i = 0; i < 15; i++)
    {
        iterators.Add(delegate { Console.WriteLine(i); });
    }

    foreach (var iterator in iterators)
    {
        iterator();
    }

    Console.Read();
}
Run Code Online (Sandbox Code Playgroud)

我已经看到的这个问题的正常版本ifor循环之前声明变量,从而使它在方法范围内,从那里很容易看出为什么输出是"15"15次.

但是,当我调试代码时,i变量超出了foreach循环中的范围,并且不再存在.然而,当我进入该iterator()方法时,它存在于该Console.WriteLine(i)行.

这个我无法理解.

c#

7
推荐指数
1
解决办法
214
查看次数

如何使用Visual Studio 2019社区创建.NET Core 3控制台应用程序?

如今情况发展如此之快,以至于教程和博客文章很难跟上。

当您的产品具有非常相似的名称时,这也无济于事。

自从Visual Studio 2019几天前问世以来,我想尝试在.NET Core 3(不是ASP.NET Core)上制作一个简单的控制台应用程序。

我安装了.NET核心SDK 3.0.100-preview3-010431从这里。但是,我实际上无法从新VS内部创建项目或通过编辑.csproj文件来解决问题,因为如果执行后者,我的应用程序将崩溃。

要执行以下任一操作的过程是:


1.创建.NET Core 3控制台应用程序

2.使用Visual Studio 2019社区创建.NET Core 3控制台应用程序

c# visual-studio-2019 .net-core-3.0

4
推荐指数
1
解决办法
1963
查看次数

奇怪的StackOverflow异常

我有以下代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine((Program)3);

        Console.WriteLine("Execution complete.");
        Console.Read();
    }

    public static implicit operator Program(int asd)
    { return 10; }
}
Run Code Online (Sandbox Code Playgroud)

它在最后一行({ return 10; })引发StackOverflow异常。我不知道为什么,因为堆栈上应该有足够的空间来存放所有内容。

我正在学习operator关键字和隐式/显式转换,因此我制作了这个小例子来测试一些内容。

c# type-conversion

2
推荐指数
1
解决办法
67
查看次数