草庐IT

Delegates

全部标签

c# - 未知类型的 CreateDelegate

我正在尝试创建委托(delegate)以在运行时读取/写入未知类型类的属性。我有一个通用类Main和一个看起来像这样的方法:Delegate.CreateDelegate(typeof(Func),get)哪里get是MethodInfo应读取的属性。问题是当属性返回int时(我猜值类型会发生这种情况)上面的代码抛出ArgumentException因为无法绑定(bind)该方法。如果是字符串,效果很好。为了解决这个问题,我更改了代码,以便使用MakeGenericType生成相应的委托(delegate)类型.所以现在代码是:Typefunc=typeof(Func);Typegen

c# - 为什么通用 EventHandler<TArgs> 未得到充分利用?

.NET2.0添加了EventHandler通用委托(delegate)类型以简化编写自定义事件的过程;而不是必须定义EventArgs类及其对应的委托(delegate)(例如MyEventArgs和MyEventHandler),您只需要编写args类。考虑到这一点,为什么这种委托(delegate)类型几乎没有出现在.NETFramework中?我知道大多数核心API都是在引入泛型之前开发的,但即使在框架的新部分(如WPF)中,它们也选择了显式定义委托(delegate)类型;例如RoutedEventHandler而不是EventHandler.通用事件处理程序委托(deleg

具有参数类型的 C# Func 委托(delegate)

如何在C#中获得Func表示具有此签名的方法的参数?XmlNodecreateSection(XmlDocumentdoc,paramsXmlNode[]childNodes)我尝试使用Func类型的参数但是,哦,ReSharper/VisualStudio2008疯狂地用红色突出显示它。更新:好的,谷歌搜索“c#paramsfunc”没有结果,但是“c#paramsdelegate”让我找到了thisquestion.按照JonSkeet的回答,看起来我可以创建一个delegate,说Foo,然后我的方法没有参数Func,我采用Foo类型的参数. 最佳答案

c# - .NET:EventHandler 竞争条件修复如何工作?

有以下模式用于在引发事件时避免竞争条件,以防另一个线程取消订阅MyEvent,使其为空。classMyClass{publiceventEventHandlerMyEvent;publicvoidF(){EventHandlerhandler=MyEvent;if(handler!=null)handler(this,EventArgs.Empty);}}与容易出现这种竞争条件的错误方法相反:classMyClass{publiceventEventHandlerMyEvent;publicvoidF(){if(MyEvent!=null)MyEvent(this,EventArgs.

c# - 具有可变参数的函数的委托(delegate)

我有这样的功能voidfunc(paramsobject[]parameters){//FunctionBody}它可以接受如下类型的参数func(10,"hello",30.0);func(10,20);等等。我想为上述功能创建一个Action委托(delegate)。可能吗?如果不是那么为什么? 最佳答案 您不能使用现有的Action与会委托(delegate)params,但您可以这样声明自己的委托(delegate):publicdelegatevoidParamsAction(paramsobject[]arguments

c# - 请解释 .NET 委托(delegate)

所以我阅读了MSDN和StackOverflow。我了解ActionDelegate的一般作用,但无论我做了多少示例,它都不会点击。总的来说,委托(delegate)的想法也是如此。所以这是我的问题。当你有这样的功能时:publicGetCustomers(Action,Exception>callBack){}这是什么,我应该向它传递什么? 最佳答案 它需要一个接受IEnumerable和Exception并返回void的函数。voidSendExceptionToCustomers(IEnumerablecustomers,Ex

c# - (如何)是否可以绑定(bind)/重新绑定(bind)一个方法来与不同签名的委托(delegate)一起工作?

我是一名C++开发人员,在C++中使用过信号和槽,这对我来说似乎类似于C#中的委托(delegate)。我发现自己在寻找“绑定(bind)”提供的功能时不知所措,觉得我一定遗漏了一些东西。我觉得像下面这样的东西,在c++中是可能的,在带有委托(delegate)的c#中应该是可能的。这是我在C++中所做的一些伪代码:SlotsomeCallback;intfoo(inti){std::coutsomeCallback=bind(fun_ptr(foo),i);++i;//addedtoshowthatlateevaluationwouldbeanon-trivialdifference

c# - List.Sort 使用 lambda 表达式

我正在尝试使用lambda表达式对列表的一部分进行排序,但在尝试这样做时出现错误:Listlist=newList();list.Add(1);list.Add(3);list.Add(2);list.Add(4);//worksfinelist.Sort((i1,i2)=>i1.CompareTo(i2));//"Cannotconvertlambdaexpressiontotype'System.Collections.Generic.IComparer'becauseitisnotadelegatetype"list.Sort(1,2,(i1,i2)=>i1.CompareTo(

c# - 如何删除所有事件处理程序

这个问题在这里已经有了答案:HowcanIcleareventsubscriptionsinC#?(10个答案)关闭1年前。假设我们有一个委托(delegate)publicdelegatevoidMyEventHandler(stringx);和一个事件处理器publiceventMyEventHandlerSomething;我们添加多个事件..for(intx=0;x我的问题是..假设一个人不知道它被添加了10(或更多或更少)次,如何从事件处理程序中删除所有方法?

c# - 最佳实践 : When should I use a delegate in . NET?

这个问题在这里已经有了答案:关闭13年前。PossibleDuplicates:DelegateUsage:BusinessApplicationsWheredoIusedelegates?你好,我是.NET中委托(delegate)概念的新手-我还没有真正使用过它们,我认为它们可能有充分的理由-我应该什么时候使用委托(delegate)?非常欢迎示例。