草庐IT

c# - 获取 Action /功能委托(delegate)的名称

我有一个奇怪的情况,我需要将委托(delegate)的名称作为字符串获取。我有一个看起来像这样的通用方法。privateTGet(Ttask,Actionmethod)whereT:class{stringmethodName=method.Method.Name//ShouldreturnBark}我是这样调用它的privatevoidMakeDogBark(){dog=Get(dog,x=>x.Bark());}但我没有看到“吠叫”,而是看到了这个"b__19".所以看起来它给我的是进行初始调用的方法名称,而不是委托(delegate)的名称。有人知道怎么做吗?

c# - 在 C# 中将委托(delegate)强制转换为 Func

我有代码:publicdelegateintSomeDelegate(intp);publicstaticintInc(intp){returnp+1;}我可以投Inc至SomeDelegate或Func:SomeDelegatea=Inc;Funcb=Inc;但我不能施放Inc至SomeDelegate然后转换为Func用通常的方式是这样的:Funcc=(Func)a;//Сompilationerror我该怎么做? 最佳答案 有一个更简单的方法来做到这一点,所有其他答案都错过了:Funcc=a.Invoke;参见thisblog

c# - 将委托(delegate)用于 LINQ 的 Distinct() 的相等比较器

我有一个使用我自己的自定义比较器的LINQDistinct()语句,如下所示:classMyComparer:IEqualityComparerwhereT:MyType{publicboolEquals(Tx,Ty){returnx.Id.Equals(y.Id);}publicintGetHashCode(Tobj){returnobj.Id.GetHashCode();}}...vardistincts=bundle.GetAllThings.Distinct(newMyComparer());一切都很好,花花公子,可以按我的意愿工作。出于好奇,我是否需要定义自己的比较器,或者我

c# - 传递异步委托(delegate)的方法签名是什么?

我最近从Objective-C领域回到了C#,C#5中的async/await关键字看起来很酷。但我仍在尝试掌握正确的语法。我想声明一个将异步委托(delegate)作为参数的方法,但我无法使调用者和被调用者的语法都正确。有人可以提供显示方法声明、调用和对委托(delegate)的调用的代码示例吗?我认为声明会像下面这样。请注意,此函数不是异步的;即它的异步性独立于委托(delegate)。voidDoSomethingWithCallback(asyncdelegatefoo(int)){...foo(42);...}电话会是这样的:DoSomethingWithCallback(a

c# - C# 中的委托(delegate)与接口(interface)

只要我目前正在尝试深入研究委托(delegate)的用途和目的,我就想提出这个问题,尽管很可能已经以类似的形式提出了这个问题。我知道委托(delegate)用作C++中使用的函数指针。事实上,如果在C#中,它们主要用作接口(interface)和多态性的替代方案。由于我可以创建特定类的子类并为它们提供适当的方法,那么还有什么可以提供委托(delegate)呢?是否存在规定使用委托(delegate)的情况,或者仅仅是在使用委托(delegate)时提高了代码的可维护性?您会推荐他们通过接口(interface)进行广泛部署吗?我只是在谈论委托(delegate),我想将他们的角色与事件

c# - 为什么我们需要 C# 委托(delegate)

我似乎一直不明白为什么我们需要委托(delegate)?我知道它们是保存方法引用的不可变引用类型,但为什么我们不能直接调用方法,而不是通过委托(delegate)调用它?谢谢 最佳答案 简单的回答:需要执行操作的代码在编写时不知道要调用的方法。如果您在编译时知道要调用哪个方法,则只能直接调用该方法,对吗?所以如果你想抽象出“在适当的时间执行ActionX”的想法,你需要一些Action的表示,这样调用Action的方法就不需要提前知道确切的实现。例如:Enumerable.Select在LINQ中无法知道您要使用的投影,除非您告诉它

c# - 不能将 lambda 表达式用作动态分派(dispatch)操作的参数,而不先将其转换为委托(delegate)或表达式树类型

我正在使用.NET4.5和VS2013,我有一个获取dynamic的查询来自数据库的结果。dynamictopAgents=this._dataContext.Sql("selectt.create_user_idas\"User\",sum(t.netamount)as\"Amount\"fromtransactiondetailtwheret.update_date>sysdate-7groupbyt.create_user_id").QueryMany();以下语句因编译错误而失败Cannotusealambdaexpressionasanargumenttoadynamical

c# - Action<T> 与委托(delegate)事件

我见过开发人员非常交替地使用以下代码。这些之间的确切区别是什么,哪些符合标准?它们是否相同,如Action和Func也是委托(delegate):publiceventActionOnLeave;publicvoidLeave(){OnLeave(newEmployeeEventAgs(this.ID));}对比publicdelegatevoidGoOnLeave(EmployeeEventAgse);publiceventGoOnLeaveOnLeave;publicvoidLeave(){OnLeave(newEmployeeEventAgs(this.ID));}

c# - Dispatcher.BeginInvoke : Cannot convert lambda to System. 委托(delegate)

我正在尝试调用System.Windows.Threading.Dispatcher.BeginInvoke。该方法的签名是这样的:BeginInvoke(Delegatemethod,paramsobject[]args)我试图向它传递一个Lambda而不是必须创建一个委托(delegate)。_dispatcher.BeginInvoke((sender)=>{DoSomething();},newobject[]{this});它给我一个编译器错误,说我can'tconvertthelambdatoaSystem.Delegate.委托(delegate)的签名以一个对象为参数,

c# - Entity Framework - 无法将 lambda 表达式转换为类型 'string',因为它不是委托(delegate)类型

我在基于C#的代码中使用EntityFramework。我遇到了意想不到的怪事,正在寻求建议。案例1、2、3、4...项目:RivWorks.dllRivWorks.Service.dllRivWorks.Alpha.dll示例(所有这些工作):RivWorks.Alpha.dll:publicstaticboolEndNegotitation(longProductID){varproduct=(fromain_dbFeed.AutoWithImagewherea.AutoID==ProductIDselecta).FirstOrDefault();...}RivWorks.Serv