小编And*_*sen的帖子

委托中变量的范围

我发现以下内容相当奇怪.然后,我主要使用动态语言中的闭包,这对于同一个"bug"应该是不可怀疑的.以下使编译器不满意:

VoidFunction t = delegate { int i = 0; };

int i = 1;
Run Code Online (Sandbox Code Playgroud)

它说:

名为"i"的局部变量不能在此范围内声明,因为它会给"i"赋予不同的含义,"i"已在"子"范围内用于表示其他内容

所以这基本上意味着在委托中声明的变量将具有声明的函数的范围.不完全是我所期望的.我甚至没有尝试过调用这个函数.至少Common Lisp有一个功能,你可以说变量应该有一个动态名称,如果你真的希望它是本地的.这在创建不泄漏的宏时尤其重要,但这样的东西也会有所帮助.

所以我想知道其他人如何解决这个问题呢?

为了澄清我正在寻找一个解决方案,其中我在delegete中声明的变量不会干扰委托声明的变量.我仍然希望能够捕获委托之前声明的变量.

c# lambda delegates scope functional-programming

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

为什么if和#的范围以这种方式在c#中

受这个问题的启发,我开始想知道为什么下面的例子在c#中都是非法的:

VoidFunction t = delegate { int i = 0; };

int i = 1;
Run Code Online (Sandbox Code Playgroud)

{
   int i = 0;
}

int i = 1;
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有人知道这种语言设计的确切原因?它是否会阻止糟糕的编程实践,如果是这样,为什么不发出警告?出于性能原因(编译和运行时)或原因是什么?

c# language-design

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

虚拟化Uniformgrid

有谁知道是否存在可以使用的WPF某处的虚拟化uniformgrid实现?

我尝试了一个stackoverflow和谷歌,到目前为止没有发现任何东西.

到目前为止我一直使用的是一个带有UniformGrid作为其ItemsPanel的ListBox.但这不会虚拟化.

.net c# wpf

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

取消选择具有扩展选择模式的WPF列表框

我有一个带扩展选择模式的简单列表框.选择工作几乎完全正常,就像它在资源管理器中工作.但取消选择并没有真正发挥作用.我想要的是当我点击列表框中元素范围之外的东西时,我希望取消选择所有元素.默认情况下,我似乎没有这样做,我做了一个涉及selectionchanged和mouseup的黑客攻击.但必须有更好的方法.有任何想法吗?

c# wpf listbox

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

如何改进Clojures错误消息

我一直在玩Clojure并且到目前为止印象非常深刻,但我遇到的一件事是来自Clojure的错误消息.它有两种形式:Java错误,如空指针异常和clojure语法错误,如缺少括号对.我想知道是否有人知道如何获得更好的错误消息?

部分原因当然是学习一门新语言,但改进错误信息永远不会受到伤害:)

clojure

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

在WPF中处理捕捉到设备像素的任何提示

WPF中的许多控件都具有此设备像素的快照(如MSDN中所述).我经常发现自己忘了设置它然后发现有些东西有时看起来很奇怪.

人们用什么来处理这个问题?

wpf

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

在C#中,var关键字与输入关键字不同吗?

C#3.0引入了var关键字.编译时,编译器会为您插入正确的类型.这意味着它甚至可以在2.0运行时运行.到现在为止还挺好.但是前几天我发现了一个案例,var关键字将被替换为对象,因此不够具体.说你有类似的东西:

var data = AdoMD.GetData(...); // GetData returns a DataTable

foreach (var row in data.Rows)
{
     string blah = (string)row[0]; // it fails since it's of type object
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用行时,IntelliSense和编译器都告诉我它是对象类型.data.Rows是类型的System.Data.DataRowCollection.以下作品:

var data = AdoMD.GetData(...); // GetData returns a DataTable

foreach (DataRow row in data.Rows)
{
     string blah = (string)row[0]; // works since it now has the right type
}
Run Code Online (Sandbox Code Playgroud)

这不是一个关于VAR的使用问题,对于一个线程在这里.

我正在使用Visual Studio 2008 SP1顺便说一句.

编辑:现在附加了正确的代码.

c# var

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