Tag: 范围

function级别范围和块级别范围之间的差异

我用JavaScript编程了几个月,主要使用jQuery 。 我理解闭包并且我已经使用过它们,但是,我仍然无法理解其他语言(如C#)中 函数级别范围和块级别范围之间的区别 。 我一直在努力教自己,没有关于这个问题的结果。 有人可以用一些简单的例子来解释我吗?

ItemGroup项目范围,或者“为什么MSBuild讨厌我?”

我有一个解决方案,我试图在TFS上构建。 我想更新所有适当文件的版本,我一直试图完成这项工作。 关于如何做到这一点有很多链接,但由于一个小问题,它们都不适合我…范围。 我的树看起来像这样: test.proj application.sln 应用(文件夹) main.cs 属性(文件夹) AssemblyInfo.cs中 当我从解决方案文件夹运行“c:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe test.proj”时…我得到以下输出: Microsoft (R) Build Engine Version 3.5.30729.1 [Microsoft .NET Framework, Version 2.0.50727.3074] Copyright (C) Microsoft Corporation 2007. All rights reserved. Build started 7/6/2009 3:54:10 PM. Project “D:\src\test.proj” on node 0 (default targets). CSFiles: ‘application\Properties\AssemblyInfo.cs’ DesktopBuild: […]

如何通过堆栈跟踪访问本地? (模仿动态范围)

背景 即使可以在运行时编译C#代码,也不可能在当前范围中包含和运行生成的代码。 相反,所有变量都必须作为显式参数传递。 与像Python这样的动态编程语言相比,人们永远无法真正复制eval的完整行为(如本例所示)。 x = 42 print(eval(“x + 1”)) # Prints 43 这个问题 所以我的问题是(无论它是否真的有用;))是否可以通过使用reflection来模拟.NET中的动态范围 。 由于.NET为我们提供了Diagnostics.StackTrace类,它允许我们检查调用方法,这个问题归结为以下几点:( 如何)可以可靠地访问调用方法的本地 ? 堆栈跟踪是否为我们提供了足够的信息来计算内存偏移量,或者托管代码中是否禁止这样做? 这样的代码是否有可能? void Foo() { int x = 42; Console.WriteLine(Bar()); } int Bar() { return (int)(DynamicScope.Resolve(“x”)); // Will access Foo’s x = 42 }

for循环中计数器变量的范围是多少?

我在Visual Studio 2008中收到以下错误: Error 1 A local variable named ‘i’ cannot be declared in this scope because it would give a different meaning to ‘i’, which is already used in a ‘child’ scope to denote something else 这是我的代码: for (int i = 0; i < 3; i++) { string str = ""; } int i […]

LINQ查询 – 解释为什么这些示例不同

我正在阅读“LINQ Pocket Reference”这本书,并且有一个特殊的例子(稍微修改如下),我很难理解……书中的解释有点简短,所以我想知道是否有人可以一步一步地打破它,这样才有意义…… IEnumerable query2 = “Not what you might expect”; foreach (char vowel in “aeiou”) { var t = vowel; query2 = query2.Where(c => c != t); // iterate through query and output (snipped for brevity) } 输出: 不是你所期望的 不是你可能xpct 不是你的xpct Nt wht yu mght xpct Nt wht y mght xpct 这对我来说很有意义……但是,事实并非如此。 IEnumerable query2 […]

非静态类中静态方法的重点是什么?

我无法通过以下代码了解潜在的错误: class myClass { public void print(string mess) { Console.WriteLine(mess); } } class myOtherClass { public static void print(string mess) { Console.WriteLine(mess); } } public static class Test { public static void Main() { myClass mc = new myClass(); mc.print(“hello”); myOtherClass moc = new myOtherClass(); moc.print(“vhhhat?”); //This says I can’t access static method in non […]

在FOR循环中声明变量

生产中发生了一个奇怪的错误,我被要求调查。 该问题被追溯到在For循环中声明的几个变量,而不是在每次迭代时初始化。 已经假设由于其声明的范围,它们将在每次迭代时“重置”。 有人可以解释为什么他们不会)? (我的第一个问题,真的很期待回复。) 下面的示例显然不是有问题的代码,但反映了这个场景: 请原谅代码示例,它在编辑器预览中看起来很好吗? for (int i =0; i< 10; i++) { decimal? testDecimal; string testString; switch( i % 2 ) { case 0: testDecimal = i / ( decimal ).32; testString = i.ToString(); break; default: testDecimal = null; testString = null; break; } Console.WriteLine( "Loop {0}: testDecimal={1} – testString={2}", i, testDecimal […]

使用LINQ填充具有特定数字范围的列表

为了使用从1到n的数字范围填充List ,我可以使用: for (i=1; i<=n; i++) { myList.Add(i); } 有没有办法通过使用LINQ内联表达式来实现相同的结果? UPDATE 假设我有一个方法getMonthName(i)给定整数返回月份的名称。 我可以使用Enumerable以某种方式直接使用月份名称填充列表

C# – 匿名函数和事件处理程序

我有以下代码: public List FindStepsByType(IWFResource res) { List retval = new List(); this.FoundStep += delegate(object sender, WalkerStepEventArgs e) { if (e.Step.ResourceType == res) retval.Add(e.Step); }; this.Start(); return retval; } 请注意我如何将我的事件成员(FoundStep)注册到本地就地匿名函数。 我的问题是:当函数’FindStepByType’结束时 – 匿名函数会从事件的委托列表中自动删除,还是我必须在逐步退出函数之前手动删除它? (我该怎么做?) 我希望我的问题很明确。

确定数字是否在指定的范围集内

我正在寻找一种流畅的方法来确定一个数字是否在指定的范围内。 我当前的代码看起来像这样: int x = 500; // Could be any number if ( ( x > 4199 && x 6999 && x 9999 && x 10999 && x 11999 && x < 12100 ) ) { // More awesome code } 有更好的方法吗?