草庐IT

delegating

全部标签

c# - 在方法中创建委托(delegate)类型

我想在C#中创建一个委托(delegate)类型,用于创建匿名方法。例如:publicvoidMyMethod(){delegateintSum(inta,intb);SummySumImplementation=delegate(inta,intb){returna+b;}Console.WriteLine(mySumImplementation(1,1).ToString());}不幸的是,我无法使用.NET2.0和C#2.0来完成。 最佳答案 为什么要在方法内创建委托(delegate)类型?在方法之外声明它有什么问题?基本上

c# - 从属性 getter 或 setter 方法创建委托(delegate)

要从方法创建委托(delegate),您可以使用编译类型安全语法:privateintMethod(){...}//andcreatethedelegatetoMethod...Funcd=Method;属性是getter和setter方法的包装器,我想创建一个属性getter方法的委托(delegate)。有点像publicintProp{get;set;}Funcd=Prop;//or...Funcd=Prop_get;不幸的是,这不起作用。我必须创建一个单独的lambda方法,当getter方法无论如何都与委托(delegate)签名匹配时,这似乎是不必要的:Funcd=()=>

c# - 将 C# 委托(delegate)声明放在它自己的文件中的什么位置?

出于习惯,我倾向于在未嵌套时将类/结构/枚举放在单独的文件中。对于委托(delegate)人来说,为一个类轮创建一个单独的文件似乎有点过分了:publicdelegatestringMyDelegateThatIsNotNestedInAnyClass(stringpar);我通常将它添加到最密切相关的类文件的底部。我只是想知道其他人在做什么? 最佳答案 我倾向于将每种类型放在一个单独的代码文件中。这样做将帮助您在解决方案资源管理器中导航,尽管ReSharper以“GoToFile”摇摆不定(来源:jetbrains.com)和“G

c# - 为什么匿名委托(delegate)可以省略参数,而 lambda 不能?

//okActionCallbackWithParam1=delegate{};//errorCS1593:Delegate'System.Action'doesnottake0argumentsActionCallbackWithParam2=()=>{};只是想知道为什么会出现这种差异。:-/ 最佳答案 Jared当然是正确的。要添加更多详细信息:几乎没有人使用“跳过参数列表”语法。我们没有需要该功能的lambda方案。该功能使类型推断和重载解析变得复杂,并使两者更有可能失败。您希望该功能使用什么语法?Actionc==>{};

c# - 使用委托(delegate)对列表进行问题排序

我正在尝试使用委托(delegate)对列表进行排序,但出现签名匹配错误。编译器说我不能从“匿名方法”转换ListmyList=GetMyList();myList.Sort(delegate(MyTypet1,MyTypet2){return(t1.ID我错过了什么?这是我找到的一些引用资料,他们也是这样做的。DeveloperFusionReferenceMicrosoftReference 最佳答案 我想你想要:myList.Sort(delegate(MyTypet1,MyTypet2){return(t1.ID.Compa

c# - MSTEST 委托(delegate)人许可

如何对装饰有PrincipalPermission属性的代码进行单元测试?例如,这个有效:classProgram{staticvoidMain(string[]args){AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);varc=newMyClass();}}[PrincipalPermission(SecurityAction.Demand,Role=@"BUILTIN\Users")]classMyClass{publicMyClass(){Console.WriteLine

c# - Windows 服务 : OnStart loop - do I need to delegate?

我有一个Windows服务,它每n秒扫描一次文件夹以查找更改。尝试启动时出现“服务未及时响应启动命令”。我在OnStart中设置了一个循环,如下所示:publicvoidOnStart(string[]args){while(!_shouldExit){//DoStuff//RepeatThread.Sleep(_scanIntervalMillis);}}这是导致错误的原因吗?我应该委托(delegate)这个方法吗? 最佳答案 OnStart应该只开始工作;它不负责这样做。这通常意味着产生一个新线程来完成实际工作。预计OnSta

c# - 我们可以将委托(delegate)保存在文件中吗 (C#)

我有一个有委托(delegate)成员的类。我可以为该类的每个实例化对象设置委托(delegate),但还没有找到任何方法来保存该对象 最佳答案 这是一件非常冒险的事情。虽然您确实可以像任何其他对象一样序列化和反序列化委托(delegate),但委托(delegate)是指向对其进行序列化的程序内部方法的指针。如果您在另一个程序中反序列化该对象,您将得到一个SerializationException-如果你幸运的话。例如,让我们稍微修改一下darin的程序:classProgram{[Serializable]publicclas

c# - 有没有办法创建一个委托(delegate)来获取和设置 FieldInfo 的值?

对于属性,有GetGetMethod和GetSetMethod以便我可以:Getter=(Func)Delegate.CreateDelegate(typeof(Func),propertyInfo.GetGetMethod());和Setter=(Action)Delegate.CreateDelegate(typeof(Action),propertyInfo.GetSetMethod());但是我该如何处理FieldInfo?我不是在寻找GetValue和SetValue的委托(delegate)(这意味着我每次都会调用反射)Getter=s=>(T)fieldInfo.GetV

c# - C# 事件处理程序委托(delegate)中的闭包?

这个问题在这里已经有了答案:CapturedvariableinaloopinC#(10个答案)关闭5年前。我目前来自函数式编程背景,如果我不了解C#中的闭包,请原谅我。我有以下代码来动态生成获取匿名事件处理程序的按钮:for(inti=0;i我希望文本"Iambuttonnumber"+i在for循环的那次迭代中以i的值结束。然而,当我实际运行该程序时,每个按钮都显示Iambuttonnumber7。我错过了什么?我正在使用VS2005。编辑:所以我想我的下一个问题是,我如何获取值(value)?