我正在浏览Sam的LINQUnleashedforC#并在第7页列出:Anonymoustypescanbeinitializedtoincludemethods,butthesemightonlybeofinteresttolinguists.我真的不明白语言学家的评论是不是在开玩笑。无论如何,在C#中做这样的事情是可能的varobj=new{Name="Joe",Weight=200,GetAge=newFunc(()=>{return43;})};现实生活中有没有人遇到过需要在匿名类型中定义函数的情况?或者这只是没有实际应用的类型推断的结果? 最佳答案
我正在设计一个由多个block组成的长期运行的数据流管道。项目被馈送到管道的输入block,最终通过它,并在最后显示在UI中(出于对用户的礼貌——管道的真正工作是将处理结果保存到磁盘)。管道block内的lambda函数可能会抛出异常,原因有多种(输入错误、网络故障、计算错误等)。在这种情况下,我不想让整个管道出错,而是想踢出有问题的项目,并将其显示在UI中的“错误”下。最好的方法是什么?我知道我可以将每个lambda函数包装在一个try/catch中:varerrorLoggingBlock=newActionBlock>(...)varworkerBlock=newTransfor
给定两个相同的匿名类型对象:{msg:"hello"}//anonType1{msg:"hello"}//anonType2并假设它们没有解析为同一类型(例如,它们可能在不同的程序集中定义)anonType1.Equals(anonType2);//false此外,假设在编译时,我无法获取一个结构(例如anonType1),因为API仅公开object所以,为了比较它们,我想到了以下技巧:使用反射获取anonType1上的msg属性进行比较。将anonType1转换为dynamic类型并在动态成员上引用.msg以进行比较比较每个对象上.GetHashCode()的结果。我的问题是:使用
有没有办法动态设置匿名类型的属性名?通常我们会这样做:varanon=new{name="Kayes"};现在我想动态设置属性的名称(或标识符),以便该名称可以来自XML文件或数据库。谢谢大家的回答。不,我的需要绝对不值得所有繁琐的选择。我只是想让我的代码符合我的团队领导开发的现有库。但我们决定更新库以支持字典类型,以便轻松解决。Pete,我很高兴了解.NET4.0中的动态类型谢谢。 最佳答案 这是不可能的,因为即使类型是匿名的,它也不是动态类型。它仍然是静态类型,并且必须在编译时知道有关它的属性。您可能想查看.NET4.0“dyn
我正在用C#编写一个小型数据结构库,但遇到了架构问题。本质上我有一个实现访问者模式的类,访问者有许多可能的实现:publicinterfaceITreeVisitor{UVisit(Nils);UVisit(Nodes);}publicabstractclassTree:IEnumerable{publicreadonlystaticTreeempty=newNil();publicabstractUAccept(ITreeVisitorvisitor);}publicsealedclassNil:Tree{publicoverrideUAccept(ITreeVisitorvisit
我有一些代码看起来像这样,并从现有集合中创建一个列表varitems=items.ConvertAll(r=>new{description=FormatDescription(r),start=r.Milestone.HasValue?r.Milestone.Value.ToString("yyyy-MM-ddTHH:mm:ssZ"):DateTime.Today.ToString("yyyy-MM-ddTHH:mm:ssZ"),classname="significance"+r.SignificanceLevel,如您所见,如果我现在没有开始日期(r.Milestone),那么我
我正在尝试编写一个简单的对象到字典转换器,如下所示:publicstaticclassSimplePropertyDictionaryExtensionMethods{publicstaticIDictionaryToSimplePropertyDictionary(thisobjectinput){if(input==null)returnnewDictionary();varpropertyInfos=frompropertyininput.GetType().GetProperties(BindingFlags.Instance|BindingFlags.Public|Bindi
有没有办法在.NET3.5运行时通过反射创建C#3.0匿名对象?我想在我的序列化方案中支持它们,因此我需要一种以编程方式操作它们的方法。稍后进行编辑以阐明用例一个额外的限制是我将在Silverlight应用程序中运行所有这些,因此额外的运行时不是一个选项,并且不确定动态生成代码将如何工作。 最佳答案 这是另一种方式,似乎更直接。objectanon=Activator.CreateInstance(existingObject.GetType()); 关于c#-C#中通过反射创建匿名对象
着眼于使用新的Mediatr3.0功能管道行为进行身份验证/授权。您通常会根据消息或处理程序进行身份验证吗?我问的原因是我对处理程序进行了授权(与MVC中的Controller相同),但行为似乎不了解处理程序,所以我不确定这是否可能/合适。我可以为每条消息添加一个IAuthorisationRequired标记接口(interface),但是如果消息是一个通知/事件并且有多个处理程序,那么也许应该运行一些处理程序而不是其他处理程序。在执行实际工作的处理程序代码上检查身份验证确实感觉更好。希望能够在处理程序上放置一个[Authorize]属性,并使用一个行为来检查它(我目前正是这样做的,
我正在阅读一些关于缓存和记忆化以及如何使用委托(delegate)和泛型轻松实现它的文章。语法非常简单,而且实现起来非常容易,但我只是觉得由于重复性,应该可以根据属性生成代码,而不必一遍又一遍地编写相同的管道代码。假设我们从默认示例开始:classFoo{publicintFibonacci(intn){returnn>1?Fibonacci(n-1)+Fibonacci(n-2):n;}}然后记住这个://Let'ssaywehaveautilityclasssomewherewiththefollowingextensionmethod://publicstaticFuncMemo