Tag: 范围

Winform中的C#和变量范围

在Winform应用程序中,我希望实例化类中的数据可由多个表单控件访问。 例如,如果我创建具有name属性的字符串属性的Class Foo,我想通过单击Button1来实例化Foo a = new a(),当我单击Button2时,我希望能够使用MessageBox。展(a.name)。 如果重要的话,可能有多个Foo实例。 能够以这种方式使用类实例的最佳选择是什么?

如何在Form1,WinForms C#中使用Form2的变量?

我在Visual Studio 2013中有一个包含两个表单的解决方案。 我想当按下Form2中的按钮时,变量flag_fb被更新,我在Form1中使用它的值。 有没有办法做到这一点? 谢谢。

在当前上下文中不存在名称’sr’

我是从微软网站关注的例子,用于从文本文件中读取。 他们说是这样做的: class Test { public static void Main() { try { using (StreamReader sr = new StreamReader(“TestFile.txt”)); { String line = sr.ReadToEnd(); Console.WriteLine(line); } } catch (Exception e) { Console.WriteLine(“The file could not be read:”); Console.WriteLine(e.Message); } } } 但是当我在Visual C#2010中这样做时,它会给我带来错误: 可能错误的空陈述 在当前上下文中不存在名称’sr’ 我删除了using部分,现在代码看起来像这样并且正在工作: try { StreamReader sr = new StreamReader(“TestFile.txt”); string line = […]

为可变范围目的使用大括号是错误的吗?

我有时会使用大括号来隔离代码块,以避免以后错误地使用变量。 例如,当我在同一个方法中放入几个SqlCommand时,我经常复制粘贴代码块,最后混合名称并执行两次命令。 添加大括号有助于避免这种情况,因为在错误的位置使用错误的SqlCommand将导致错误。 这是一个例子: Collection existingCategories = new Collection(); // Here a beginning of a block { SqlCommand getCategories = new SqlCommand(“select Title from Movie.Category where SourceId = @sourceId”, sqlConnection, sqlTransaction); getCategories.Parameters.AddWithValue(“@sourceId”, sourceId); using (SqlDataReader categoriesReader = getCategories.ExecuteReader(System.Data.CommandBehavior.SingleResult)) { while (categoriesReader.Read()) { existingCategories.Add(categoriesReader[“Title”].ToString()); } } } if (!existingCategories.Contains(newCategory)) { SqlCommand addCategory = new SqlCommand(“insert into […]

在C#中进行范围查找 – 如何实现

我试图了解如何实现Jon Skeet在线程中找到的代码: 在C#中进行范围查找? 有人可以使用以下内容提供设置示例:1-10000,10001-40000,40000+ 第一组在哪里分别返回值1,2,3? 我不太清楚这段代码是如何完成的。 TX。 public interface IRangeComparer { /// /// Returns 0 if value is in the specified range; /// less than 0 if value is above the range; /// greater than 0 if value is below the range. /// int Compare(TRange range, TValue value); } /// /// See contract for Array.BinarySearch […]

委托中变量的范围

我发现以下内容相当奇怪。 然后,我主要使用动态语言中的闭包,这对于同一个“bug”不应该是可疑的。 以下使编译器不满意: VoidFunction t = delegate { int i = 0; }; int i = 1; 它说: 名为“i”的局部变量不能在此范围内声明,因为它会为“i”赋予不同的含义,“i”已在“子”范围中用于表示其他内容 所以这基本上意味着在委托中声明的变量将具有声明的函数的范围。不完全是我所期望的。 我甚至没有试过调用这个函数。 至少Common Lisp有一个function,你可以说变量应该有一个动态名称,如果你真的希望它是本地的。 这在创建不泄漏的宏时尤其重要,但这样的东西也会有所帮助。 所以我想知道其他人如何解决这个问题呢? 为了澄清我正在寻找一个解决方案,其中我在delegete中声明的变量不会干扰委托后声明的变量。 我仍然希望能够捕获委托之前声明的变量。

关于C#变量范围与其他语言的问题

首先,让我说我之前从未使用过C#,而且我对此并不了解。 我正在和Sebesta的“编程语言概念第9版”一书中学习我的“编程语言”考试。 在我从“范围声明顺序(第246页)”中阅读以下摘录后,我有点疑惑: “…例如,在C99,C ++,Java中,所有局部变量的范围都是从它们的声明到那些声明出现的块的末尾。 但是,在C#中,块中声明的任何变量的范围是整个块,无论块中声明的位置如何,只要它不在嵌套块中。方法也是如此。 注意C#仍然要求在使用它们之前声明所有变量。因此,尽管变量的范围从声明扩展到该声明出现的块或子程序的顶部,该变量仍然不能在其声明之上使用 “ 为什么C#的设计师会做出这样的决定? 这种不寻常的决定有什么特定的理由/优势吗?

通过更改值传递参数到任务 – 行为?

场景:循环中的异步任务执行一个方法,该方法包含随程序继续而变化的参数: while(this._variable { aList.add(this._variable); update(this._savePoint); }); } 如果循环比任务完成的运行得快,列表是否会添加变量的当前值,还是本地保存的变量并添加原始值?

明确的本地范围 – 任何真正的好处?

我正在清理一些代码并删除了不再需要的if语句。 但是,我意识到我忘了删除括号。 这当然是有效的,只是创建了一个新的本地范围。 现在这让我思考。 在我多年的C#开发中,我从未遇到过使用它们的理由。 事实上,我有点忘了我能做到。 定义本地范围有什么实际好处吗? 我理解我可以在一个范围内定义变量,然后在不相关的范围(for,foreach等)中再次定义相同的变量,如下所示: void SomeMethod() { { int i = 20; } int i = 50; //Invalid due to i already being used above. } void SomeMethod2() { { int i = 20; } { int i = 50; //Valid due to scopes being unrelated. } { string i = […]

如何从整数范围生成正态分布随机?

给定整数范围的开始和结束,如何计算此范围之间的正态分布随机整数? 我意识到正态分布进入 – +无穷大。 我猜尾巴可以被截断,所以当一个随机变量超出范围时,重新计算。 这提高了范围内整数的概率,但只要这种效果是可以容忍的(<5%),就可以了。 public class Gaussian { private static bool uselast = true; private static double next_gaussian = 0.0; private static Random random = new Random(); public static double BoxMuller() { if (uselast) { uselast = false; return next_gaussian; } else { double v1, v2, s; do { v1 = 2.0 * […]