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

在对象中转换匿名类型并检索字段分享

时间:2023-04-10 16:32:03 C#

在对象中转换匿名类型并检索字段我使用C#asp.net4。我有一种方法可以使用匿名类型(字段:标题、类别ID)填充转发器,在转发器中我还放置了一个标签:varparentCategories=fromcincontext.CmsCategorieswherec.CategoryNodeLevel==1selectnew{c。标题,c.CategoryId};uxRepeter.DataSource=parentCategories;uxRepeter.DataBind();我需要在Repeater事件ItemDataBound上更改Repeater中每个标签的文本属性protectedvoiduxRepeter_ItemDataBound(objectsender,RepeaterItemEventArgse){uxLabel.Text=//这里怎么办!!!!!!!!!所以我需要使用e.Item来设置Label.Text的属性(或更多好方法)。我的问题是我无法使用e.Item(匿名类型字段标题)并将其设置为我的标签的文本专有性。我知道匿名类型只能转换为对象类型,但在我的例子中,我的匿名类型有Title和CategoryId字段。我的问题:如何投射和检索我感兴趣的领域?谢谢您的宝贵时间编辑:我遇到了一些错误:无法将类型为“f__AnonymousType0`2[System.String,System.Int32]”的对象转换为类型“System.String”。约瑟夫提出的选项很好,但你可以稍微做一下。它有点脆弱,因为它依赖于您在两个地方以完全相同的方式指定匿名类型。开始:publicstaticTCastByExample(objectinput,Texample){return(T)input;然后:对象项=...;//但是,您从控件中获取值//使用与其他地方相同的属性名称、类型和顺序来指定“示例”。varcast=CastByExample(item,new{Title=default(string),CategoryId=default(int)});varresult=cast.Title;编辑:进一步的皱纹-两个匿名类型创建表达式必须在同一个程序集(项目)中。很抱歉之前忘记提及这一点。正如您基本上指出的那样,您不能将匿名类型转换为任何类型,因为您实际上没有任何类型可以将其转换为。所以你真的有两个选择。不要转换为匿名类型,而是为处理这种情况而构建的已知类型将动态变量分配给项目并使用动态属性示例1:varparentCategories=fromcincontext.CmsCategorieswherec.CategoryNodeLevel==1selectnewRepeaterViewModel{c.Title,c.CategoryId};示例2:(我认为你是最后一行,你打算分配链接var)动态iCanUseTitleHere=e.Item;link.Text=iCanUseTitleHere.Title;//这里没有编译问题}在这种情况下你可以使用dynamic.我认为代码将是:uxLabel.Text=link.Title;//因为'link'现在是动态的,编译器直到运行时才会检查Title属性是否存在。不能直接转换为(typeof(new{Title="",CategoryID=0}))吗?以上就是C#学习教程:Object中的匿名类型转换,获取Field共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: