我一直在阅读一些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)
我已经看到的这个问题的正常版本i在for循环之前声明变量,从而使它在方法范围内,从那里很容易看出为什么输出是"15"15次.
但是,当我调试代码时,i变量超出了foreach循环中的范围,并且不再存在.然而,当我进入该iterator()方法时,它存在于该Console.WriteLine(i)行.
这个我无法理解.
如今情况发展如此之快,以至于教程和博客文章很难跟上。
当您的产品具有非常相似的名称时,这也无济于事。
自从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控制台应用程序
我有以下代码:
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关键字和隐式/显式转换,因此我制作了这个小例子来测试一些内容。