小编Sum*_*ith的帖子

ac#lambda如何捕获变量

为什么以下代码打印11次?

int i = 10;
Action fn1 = () => Console.WriteLine(i);
i = 11;
Action fn2 = () => Console.WriteLine(i);
fn1();
fn2();
Run Code Online (Sandbox Code Playgroud)

产出11 11

根据这篇文章中的答案 - 如何告诉lambda函数捕获副本而不是C#中的引用? - 将lambda转换为具有捕获变量副本的类.如果是这样的话我的例子不应该打印10和11吗?

现在,当lambda通过引用捕获时它如何影响捕获的变量的生命周期.例如,假设上面的代码片段在函数中,并且Actions的范围对于变量是全局的,如下所示:

class Test
{
  Action _fn1;
  Action _fn2;

  void setActions()
  {
    int i = 10;
    _fn1 = () => Console.WriteLine(i);
    i = 11;
    _fn2 = () => Console.WriteLine(i);
  }

  static void Main()
  {
    setActions();
    _fn1();
    _fn2();
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当调用操作时,变量i不会超出范围吗?那么,这些动作是否留下悬挂指针的参考?

c# lambda closures

7
推荐指数
2
解决办法
255
查看次数

.NET中的字段初始化程序有什么用(除了可读性)?

我只是想了解字段初始化器.我遇到了错误 - 字段初始值设定项不能使用非静态字段,方法或道具.在寻找答案的同时,我发现了这篇文章.

对帖子来说,大部分投票的答案表明,在调用构造函数之前,"this"不存在.有谁知道为什么会这样?为什么在调用字段初始值设定项之前不能存在'this'?

在我看来,来自C/C++背景,'this'只是堆上分配的一块内存.并且必须存在才能为"this"的任何成员分配值.(因此它绝对存在于字段初始化器之前).

.net language-design

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

如何查找 URL 注册(而非预订)?

是否有 Windows 命令可以列出持有特定 URL 注册的应用程序的进程 ID 和名称?

我正在寻找在以下 URL 命名空间下注册的应用程序。

http://localhost:55987/
Run Code Online (Sandbox Code Playgroud)

我知道可以使用以下方式列出 URL 预订

netsh http show urlacl

保留意见指出

 Reserved URL            : http://localhost:55987/
     User: \Everyone
         Listen: Yes
         Delegate: No
         SDDL: D:(A;;GX;;;WD)
Run Code Online (Sandbox Code Playgroud)

但是如何找到在保留的 URL 命名空间下进行的注册呢?

windows asp.net tcp http web-development-server

5
推荐指数
1
解决办法
8851
查看次数

M 后缀与十进制文字的相关性是什么

decimal l = 50.0M;
Run Code Online (Sandbox Code Playgroud)

我已经看到其他答案表明 M 是明确地将类型声明为十进制 - M 在 C# 十进制文字表示法中代表什么?

然而,当变量的类型被专门说明时,为什么要有个后缀呢?当未指定变量类型时,我可以看到后缀的相关性,例如:

var l = 50.0M
Run Code Online (Sandbox Code Playgroud)

c# decimal literals

4
推荐指数
2
解决办法
3726
查看次数

包裹在显式事务中的SSMS中的T-SQL为什么运行得更快

该查询只是将相同的值“ hello”插入表中1000次。

当此查询在显式事务中运行时(在begin tran和中包装),commit tran它会立即运行。但是,如果begin tran & commit tran注释已被注释掉,则大约需要8秒钟才能完成!

谁能解释一下?

查看下面的查询和结果:

显式:

/*------------------------
drop table Test

create table Test (Name varchar(10))

begin tran
    set nocount on
    declare @i int = 1000

    select 'START: ', getdate() -- trick to get row title printed

    while (@i > 0)
    begin
        insert into Test (Name)
            select 'hello'
        set @i = @i - 1
    end

    select 'END: ', getdate() -- trick to get row title printed
    commit tran
------------------------*/ …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server ssms transactions

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