Tag: 委托

关于foreach和代表的问题

假设以下代码: foreach(Item i on ItemCollection) { Something s = new Something(); s.EventX += delegate { ProcessItem(i); }; SomethingCollection.Add(s); } 当然,这是错误的,因为所有代表都指向同一个项目。 替代方案是: foreach(Item i on ItemCollection) { Item tmpItem = i; Something s = new Something(); s.EventX += delegate { ProcessItem(tmpItem); }; SomethingCollection.Add(s); } 在这种情况下,所有代表都指向他们自己的Item。 这种方法怎么样? 还有其他更好的解决方案吗?

unit testing具有事件和委托的类

我是新手测试请帮助。 我有以下课程 public delegate void OnInvalidEntryMethod(ITnEntry entry, string message); public class EntryValidator { public event OnInvalidEntryMethod OnInvalidEntry; public bool IsValidEntry(ITnEntry entry, string ticker) { if (!IsFieldValid(entry, ticker.Trim().Length.ToString(), “0”)) return false; return true; } private bool IsFieldValid(ITnEntry entry, string actual, string invalidValue) { if (actual == invalidValue) { RaiseInvalidEntryEvent(entry); return false; } return true; } private […]

Func 与委托和lambda表达式之间的区别

在深化自己更高级的C#function的同时,我遇到了一些代码,我并不完全知道它的区别。 这是关于这两行: Func giveLength = (text => text.Length); 和 Func giveLength = delegate(string text) { return text.Length; }; 这可以以相同的方式使用: Console.WriteLine(giveLength(“A random string.”)); 所以基本上……这两条线有什么区别? 这些行是否编译为相同的CIL?

在C#多播委托中使用多播

何时通过单播代表进行多播委托是否有用? 我使用代理很多,主要是与C#lambdas结合使用,但我从来没有感觉到使用C#委托的多播方面的冲动,即我从来没有想过在一个委托中将多个委托组合在一起。 因此,我很好奇多播代理在什么样的情况下是有用的 – 我只能想到一些例子,你可以通过其他方式轻松实现这些function,比如链接代表或将它们放在列表中。 特别是,Eric Lippert 在这里的回答给人的印象是,即使C#团队有时会忘记代表的多播性。

传递操作符和其他参数

我有一些非常低效的代码,其中许多行出现4次,因为我通过“”操作以及各种变量和常量进行排列。 似乎有一种方法可以编写一次函数并传入运算符以及必要的变化值和“ref”变量。 我需要学习什么技巧? 有人建议“代表”,但我不知道如何以这种方式使用它们。 这是在C#2.0,VS2005中,但如果该技术是通用的并且也可以与C ++一起使用,那将是很好的。 请求一些代码:以下出现在许多伪装中,具有不同的“”符号以及“+”和“ – ”符号的混合: if (move[check].Ypos – move[check].height / 200.0D < LayoutManager.VISIO_HEIGHT – lcac_c.top) { move[check].Ypos = move[check].Ypos + adjust; . . .

匿名方法和委托

我试图理解为什么BeginInvoke方法不接受匿名方法。 void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (InvokeRequired) { //Won’t compile BeginInvoke(delegate(object sender, ProgressChangedEventArgs e) { bgWorker_ProgressChanged(sender, e); }); } progressBar1.Increment(e.ProgressPercentage); } 它告诉我’无法从’匿名方法’转换为’System.Delegate’,而当我将匿名方法转换为委托时,它确实有效吗? BeginInvoke((progressDelegate)delegate { bgWorker_ProgressChanged(sender, e); });

在C#中使用免费generics类型参数模拟委托

这是一个关于语言设计,模式和语义的难题。 请不要因为你没有看到实际价值而进行投票。 首先,让我们考虑一下函数及其参数。 然后我们将看看函数与其参数/参数和generics类/函数及其类型参数/类型参数之间的类比。 函数是代码块,带有一些未指定的值,称为“ 参数 ”。 您提供参数并接收结果。 generics类是具有一些未指定的“ 类型参数 ”的类。 您提供了类型参数 ,然后您可以使用该类 – 调用构造函数或调用静态方法。 非generics类中的generics函数是具有一些未指定的“ 类型参数 ”和一些未指定的“ 值参数 ” 的函数 。 您提供了type-arguments和value-arguments来接收结果。 代表是指向特定function的指针。 创建委托时,不要指定函数参数 ,而是稍后提供它们。 问题是.Net与具有未指定generics类型参数的generics函数没有等效的Delegates。 您以后不能为type-parameters提供类型值 。 我们可以想象代理不仅有自由值参数 ,还有自由类型参数 。 static class SomeClass { //generic function public static T GetValue() { return default(T); } } //creating delegate to generic function or method group […]

代表的@前缀是否有任何特殊含义?

有几次我见过ReSharper生成的代码如下所示: delegate void myHandler(int i); myHandler myHandlerContainer; … foreach (Delegate @delegate in myHandlerContainer.GetInvocationList()) {…} @delegate中的’ @ ‘是否赋予该变量任何特殊的语义含义? 或者这只是我之前没遇到过的惯例?

将IronPython方法分配给C#委托

我有一个C#类看起来有点像: public class MyClass { private Func processMethod = (ds) => { //default method for the class } public Func ProcessMethod { get{ return processMethod; } set{ processMethod = value; } } /* Other details elided */ } 我有一个IronPython脚本,可以在应用程序中运行 from MyApp import myObj #instance of MyClass def OtherMethod(ds): if ds.Data.Length > 0 : quot = […]

在运行时动态创建函数

它可能甚至不可能这样做,但无论如何我会问。 是否有可能创建一个接收字符串的函数,然后将其用作lambda中使用的转到运算符(=>)的右侧参数? 实际上,我想要做的是能够在运行时重新定义特定类的特定方法。 我想在程序运行时写下一个函数并将其附加到委托。 可能吗?