当前位置: 首页 > 编程语言 > C#

如何声明具有匿名返回类型的Func?分享

时间:2023-04-10 16:22:00 C#

如何声明返回类型为匿名的Func?我需要能够做到这一点:vargetHed=()=>{//dostuffreturnnew{Property1=value,Property2=value2,etc...};};varanonymousClass=getHed();但是我得到一个错误,表明我需要显式声明getHed。如何声明Func以使T是我要返回的匿名类型?如果您对我为什么需要这样做感到好奇,那是因为我使用了允许自定义代码的第3方软件,但仅限于一种方法。这会变得非常难以管理。我有一个想法,我可以使用匿名方法来帮助保持程序代码的组织性。在这种情况下,为了帮助我,我需要一个新类,除了匿名我不能定义它。与匿名类型的基本情况一样,解决方案是使用泛型方法,以便您可以使用方法类型推断:publicstaticFuncDefineFunc(Funcfunc){returnfunc;你现在可以写:vargetHed=DefineFunc(()=>{//dostuffreturnnew{Property1=value,Property2=value2,etc...};});使用以下通用方法让编译器为您推断匿名类型:publicstaticFuncMakeFn(Funcf){returnf;}用法:vargetHed=MakeFn(()=>new{Property1=...,Property2=...});varanonymousClass=getHed();//你现在可以访问Property1和Property2vartest=anonymousClass.财产1;简而言之,这是做不到的。您需要一个额外的通用方法来欺骗编译器推断T是您的匿名类型,就像此处提供的其他答案一样。但是既然你已经写过这是一个特殊情况,所有的东西都必须适合一个单一的方法,那么不,这是不可能完成的。编译器不允许这种语法:varx=()=>...它需要这样:DelegateTypex=()=>...所以你需要欺骗编译器为DelegateType设置正确的类型,这可能是Func,这只能通过类型推断来完成。但是,类型推断和泛型参数要求方法是泛型的,因此需要一个必须是泛型的附加方法来帮助编译器执行此类型推断。因为你需要留在一个方法里面...以上是C#学习教程:如何声明一个返回类型为匿名的Func?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: