Tag: scope

Ninject:将父实例提供给正在解决的子项

我有这个类层次结构: public interface ISR { } public interface ICU { } public interface IFI { } public class CU : ICU { } public class SR : ISR { public SR(IFI fi) { FI = fi; } public IFI FI { get; set; } } public class FI : IFI { public FI(ISR sr, ICU […]

从异步WCF双工调用更新asp.net页面 – 对象范围 – ASP.NET

我有以下疑问。 我有一个页面“MyPage”,我在页面类中声明了很少的字典对象。 我怀疑是 如果我将字典声明为私有非静态对象,我无法在该页面类中的函数中使用它(该对象被取消) 但是,如果我声明字典是静态的,我可以跨越函数跨越对象。 但是,对于现在打开页面的所有用户,该对象是否相同(猜测每个用户将依次拥有该页面的实例具有页面类的实例,并且类的静态变量在所有实例中都是不变的class级) 我的理解是对的吗? 如何声明对象在页面类中的所有函数中可用,并且对于页面的每个实例(用户)都是唯一的。 UPDATE1 好吧,我发现页面类中字典对象的初始化是在不同的线程中完成的(WCF Duplex回调)。 但是在主页面线程中,字典对象仍然保持为null(未初始化)。 有任何想法吗? UPDATE2 编组 – 任何机会都有用吗? UPDATE3 回复约翰 – 感谢您的回复。 我现在面临的问题是将数据从客户端的WCF回调类(将在单独的线程中调用)传递到asp.net页面。 那我该怎么做呢? 查看状态可以帮助我跨请求保留数据。 但是当服务器调用回调通知更改时,我应该如何将更改(数据)传递给UI线程(asp.net页面)?

switch语句中的奇数变量范围

这个问题让我想起了一个关于开关的一个未解决的问题: int personType = 1; switch (personType) { case 1: Employee emp = new Employee(); emp.ExperienceInfo(); break; case 2: Employee emp = new Employee(); //Error: A local variable named ’emp’ is already defined in this scope emp.ManagementInfo(); break; case 3: Student st = new Student(); st.EducationInfo(); break; default: MessageBox.Show(“Not valid …”); } 为什么emp在’案例2’中被认可? 在C ++中(如果我没有错)我们可以一起使用多个案例,但在C#中这是不可能的,我们应该使用break关闭case […]

Lambda捕获问题与迭代器?

如果已经问过这个问题,请道歉,但假设我们有这个代码(我用Mono 2.10.2运行它并用gmcs 2.10.2.0编译): using System; public class App { public static void Main(string[] args) { Func f = null; var strs = new string[]{ “foo”, “bar”, “zar” }; foreach (var str in strs) { if (“foo”.Equals(str)) f = () => str; } Console.WriteLine(f()); // [1]: Prints ‘zar’ foreach (var str in strs) { var localStr […]

multithreading和lambda变量范围

我正在使用一个管理线程池来运行操作的类。 最初它被编码为采取Action(没有参数),我这样称呼它: void LoadTasks() { string param; // some code loops and changes param { threadPool.EnqueueTask(() => SomeMethod(param)); } } 由于线程运行一些很好,但偶尔param变量不是我所期望的…它是一个“更新”的值,而不是我打算发送给该方法。 更改线程池以接受Action并在没有lambda的情况下调用 – 就像这个threadPool.EnqueueTask(SomeMethod, param) – 解决了我的问题。 关于线程安全,我看到了很多关于C#lambdas的问题。 例如,lambdas 的公认答案 比您预期的更不可能是线程安全的。 我发现关于lambdas / closures / scoping的其他问题和答案令人困惑。 所以我正在寻找lambdas和变量范围的解释,理想情况与我的例子中的问题有关。

儿童范围&CS0136

以下代码无法编译声明“在此范围内无法声明名为’st’的局部变量,因为它会给’st’赋予不同的含义,’st’已在’子’范围内用于表示其他内容”: var l = new List(); l.Find(st => st.EndsWith(“12”)); string st = “why this fails?”; 我理解为什么这不起作用: string preParent = “”; { string preParent = “Should fail cause we change the meaning”; } 当我们执行以下操作时,我们得到“CS0103:当前上下文中不存在名称’postParent’”: { string postParent=string.Empty; } postParent = “Should this work?”; 我没有得到的是为什么编译器足够聪明才能看到postParent不在范围内,但是不允许我定义一个与子范围内使用的变量同名的新变量(显然是此时的范围)。 编译器是否通过拒绝让我使用变量来简单地强制执行范围? 如果是这样有意义。 =========== 编辑: 我想我也觉得有趣的是你如何在一个方法中的两个子范围内拥有相同的变量,所以这是有效的: { string thisWorks= string.Empty; } { string […]

C# – using语句的位置

我注意到很多东西来回的一件事是将使用语句放在C#代码文件中 – 无论是在最外层还是在命名空间内。 我理解using语句的位置会影响该文件中引用的范围,但我不明白的是,在大多数情况下,有人会希望在其命名空间中使用它们的using语句。 在几乎所有情况下 ,单个文件中只存在一个命名空间声明,因此使用using语句的范围似乎/(是?)无用。 如果一个人在同一个文件中放置了多个类型和多个命名空间,那么使用语句进行范围化非常有意义,但即使在具有一个命名空间的文件中,我仍然会看到大量的这种情况。 为什么? using System; namespace MyNamespace { using System.Text; public class MyClass { // … } } 在整个项目中,看似不必要的一个例子是ASP.NET MVC源代码 。

语句块中的变量范围

for (int i = 0; i < 10; i++) { Foo(); } int i = 10; // error, 'i' already exists —————————————- for (int i = 0; i < 10; i++) { Foo(); } i = 10; // error, 'i' doesn't exist 根据我对范围的理解,第一个例子应该没​​问题。 它们都不允许的事实似乎更奇怪。 当然’我’要么在范围内,要么不在范围内。 有什么不明显的范围我不明白这意味着编译器真的无法解决这个问题? 或者只是一个保姆状态编译案例?