草庐IT

c# - 如何声明带有 out 参数的通用委托(delegate)

这个问题在这里已经有了答案:Funcwithoutparameter(4个答案)关闭8年前。Func,只是不编译,如何声明我希望第二个参数是out一个?我想这样使用它:publicclassFoo(){publicFuncDetectMethod;}

c# - 我可以使用 lambda 语法忽略委托(delegate)参数吗?

我很好奇为什么C#允许我在某些情况下忽略委托(delegate)参数,而在其他情况下不允许。例如,这是允许的:Actionaction=delegate{Console.WriteLine("delegate");};但这不是:Actionaction=()=>Console.WriteLine("lambda");有没有办法使用lambda初始化委托(delegate)并忽略参数?我知道我可以向lambda添加一个参数并修复前一行,但这更多是一个与编译器有关的学术问题,以及它为什么或如何工作。 最佳答案 我相信您的第一个示例实际上

c# - 从 MethodInfo 创建委托(delegate)

我目前在尝试从MethodInfo创建委托(delegate)时遇到问题。我的总体目标是查看类中的方法并为标有特定属性的方法创建委托(delegate)。我正在尝试使用CreateDelegate但出现以下错误。Cannotbindtothetargetmethodbecauseitssignatureorsecuritytransparencyisnotcompatiblewiththatofthedelegatetype.这是我的代码publicclassTestClass{publicdelegatevoidTestDelagate(stringtest);privateList

c# - C# 中的委托(delegate)和 F# 中作为第一类值的函数有什么区别?

更具体地说,委托(delegate)具有哪些特征(如果有)是F#中的第一类值所没有的;作为一流值的函数具有(如果有的话)C#中的委托(delegate)所没有的特征是什么? 最佳答案 委托(delegate)和F#“第一类函数值”有很大不同。委托(delegate)是CLR的一种机制,是函数指针+对象对的类型安全包装器(例如方法,this指针与方法地址一起被捕获)。另一方面,F#函数值是抽象类的实现FSharpFunc(在F#正式发布之前它被称为FastFunc)。调用通过普通的虚拟方法发生,这比委托(delegate)调用快得多。

c# - 我只能用 "as"转换一个逆变委托(delegate)

我正在尝试转换一个逆变委托(delegate),但出于某种原因我只能使用“as”运算符来完成。interfaceMyInterface{}delegatevoidMyFuncType(InTypeinput);classMyClasswhereT:MyInterface{publicvoidcallDelegate(MyFuncTypefunc){MyFuncTypecastFunc1=(MyFuncType)func;//ErrorMyFuncTypecastFunc2=funcasMyFuncType;MyFuncTypecastFunc3=funcisMyFuncType?(My

c# - 向事件添加委托(delegate) - 线程安全

可以同时从多个线程执行以下代码。this._sequencer.Completed+=OnActivityFinished;从多个线程向事件处理程序添加委托(delegate)是否线程安全?从多个线程的事件处理程序中删除委托(delegate)是否线程安全?使该线程安全的最简单且可维护的方法是什么? 最佳答案 如果您不指定自己的事件添加/删除处理程序,C#编译器会生成此添加处理程序(由.NETReflector重构):publicvoidadd_MyEvent(EventHandlervalue){EventHandlerhandl

c# - 有条件属性时创建委托(delegate)

我有一个带有PCLDebug类的可移植类库:publicstaticclassPCLDebug{publicstaticActionLogLine{get;set;}}我想要做的是在外部项目中设置一次,然后能够在PCL中调用LogLine以将内容打印到VS输出窗口。这是我的尝试:MyPCL.PCLDebug.LogLine=System.Diagnostics.Debug.WriteLine;这里的问题是编译器报错,因为System.Diagnostics.Debug.WriteLine有一个Debug的条件属性:Cannotcreatedelegatewith'System.Diag

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

我有一个基类,它有一个bool属性,如下所示:publicabstractclassMyBaseClass{publicboolInProgress{get;protectedset;}}我正在从它继承另一个类,并尝试将InProgress作为委托(delegate)添加到字典中。但它给我一个错误。这就是我的派生类的样子:publicabstractclassMyClass{Dictionarydict=newDictionary();dict.Add("InProgress",InProgress=>base.InProgress=InProgress);}这是我遇到的错误:Cann

c# - 从 methodinfo 获取委托(delegate)

我有一个下拉列表,它是通过检查类的方法并包括与特定签名匹配的方法来填充的。问题在于从列表中获取所选项目并让委托(delegate)在类中调用该方法。第一种方法有效,但我无法弄清楚第二种方法的一部分。例如,publicdelegatevoidMyDelegate(MyStatestate);publicstaticMyDelegateGetMyDelegateFromString(stringmethodName){switch(methodName){case"CallMethodOne":returnMyFunctionsClass.CallMethodOne;case"CallMe

c# - 为什么 2 个委托(delegate)实例返回相同的哈希码?

采取以下措施:varx=newAction(()=>{Console.Write("");});vary=newAction(()=>{});vara=x.GetHashCode();varb=y.GetHashCode();Console.WriteLine(a==b);Console.WriteLine(x==y);这将打印:TrueFalse为什么哈希码相同?这有点令人惊讶,并且会使在Dictionary中使用委托(delegate)与List一样慢(又名O(n)用于查找).更新:问题是为什么。IOW谁做出了这样(愚蠢的)决定?更好的哈希码实现应该是:returnMethod^T