前景提要
关于匿名类如何动态添加属性的问题!
0 [待解决问题] 这里有一个需求,我需要new一个匿名类,但是我事先不知道其中的属性是什么,现在我要把字典里面的键值赋给它,
最后是想都到这样的一东西
我不知道我这样做是不是合理,或者又其他办法,求告知 C# 匿名类 基础 爱吃鲸的虾 | 初学一级 | 园豆: 147
提问于:2020-05-29 17:16 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(7) 0 布吉岛类型,就用object,简单粗暴 猝不及防 | 园豆:1976 (小虾三级) | 2020-05-29 17:21 object怎么设置属性赋值?现在我要new一个类,但是直接new一个object没有意义 支持( 0 ) 反对( 0 ) 爱吃鲸的虾 | 园豆:147 (初学一级) | 2020-05-29 17:29 @爱吃鲸的虾: 奥,你这个问题应该是不确定参数个数导致不能使用匿名类的问题 支持( 0 ) 反对( 0 ) 猝不及防 | 园豆:1976 (小虾三级) | 2020-05-29 17:32 @猝不及防: 对啊,感觉我走偏了,应该有其他办法,只是我没想到,我需要一个动态的对象,键值都是可以动态定义的,就非常类似于字典,但是又不是字典 支持( 0 ) 反对( 0 ) 爱吃鲸的虾 | 园豆:147 (初学一级) | 2020-05-29 17:37 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 1 匿名类是不行的,匿名类必须key和value都确认了。
你可以试试dynamic或者JSON对象,但是不推荐这么干。 守望雲影 | 园豆:32 (初学一级) | 2020-05-29 17:43 dynamic试过,但是它的属性也是要手动去定义的,在不确定属性的情况下也没法用,我现在在试json,我想应该换个思路了 支持( 0 ) 反对( 0 ) 爱吃鲸的虾 | 园豆:147 (初学一级) | 2020-05-29 17:55 @爱吃鲸的虾: 抱歉抱歉,我理解错你的问题了。
按照你说的,就算生成那样的类,你也没办法通过类.属性这样点出来,因为你也不知道属性名。
所以还是只能当成一个类似字典的东西去读,所以这个需求实际是没意义的。
如果你 想要的是这样格式的一个字符串,那就好办了。我记得牛顿json对字典序列化就是那样的结果。 支持( 0 ) 反对( 0 ) 守望雲影 | 园豆:32 (初学一级) | 2020-05-29 18:44 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 这里有一个需求,我需要new一个匿名类。
通常这99.99%是伪需求。 简单的说,这不是原始需求,而是程序员错误分析,或者以为只能这样解决或造出来的需求。 说出你的原始需求,要解决的原始问题是什么,可能有100多种解决方案,都不需要解决你现在的问题。 爱编程的大叔 | 园豆:30664 (高人七级) | 2020-05-29 17:59 大佬好,我现在项目里用到了Dapper,一个Orm框架,我想封装一下自己用,现在我写了一条sql语句,类似这样
然后它要传参数@name,@pwd,dapper里给出了这样一个方案
但是我想写成公共的方法,但是userinfo这个类(表名)这个位置定义成泛型类(TEntity)没法实现,lambda没法给他指定字段名。
后面我看了dapper的参数可以直接传一个对象,类似问题里那种,但是现在发现那种匿名对象没法动态生成,所以大佬有什么好的办法吗 支持( 0 ) 反对( 0 ) 爱吃鲸的虾 | 园豆:147 (初学一级) | 2020-05-30 11:21 @爱吃鲸的虾: 传个泛型T,他不香吗? 支持( 1 ) 反对( 0 ) 华临天下 | 园豆:1364 (小虾三级) | 2020-05-30 17:50 @爱吃鲸的虾: 我也建议你可以看一下泛型相关的资料。 支持( 0 ) 反对( 0 ) 爱编程的大叔 | 园豆:30664 (高人七级) | 2020-05-31 22:29 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 可以试试 dynamic dudu | 园豆:39003 (高人七级) | 2020-05-29 18:42 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 dynamic 不就是干这个事情的么。 dynamic d= new ExpandoObject(); d.anything="aa"; d.any=()=>{}; var kv = (ICollection<KeyValuePair<string, object>>)d; kv.add("name","cnblogs"); czd890 | 园豆:8909 (大侠五级) | 2020-05-29 22:47 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 看了你的文字描述还是搞不太懂,你能把你想写的公共方法定义出来发上来吗,形如这样: returnType Function(Input) 会长 | 园豆:8398 (大侠五级) | 2020-05-30 14:55 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 可以试试 expandoObject,不知道是否符合你的需求 var dic = new Dictionary<string, object> { { "Foo", "bar" }, { "Some", new { Key = "key", Value = "value" } } }; dynamic obj = dic.Aggregate( new ExpandoObject(), (agg, prop) => { var (key, value) = prop; agg.TryAdd(key, value); return agg; }); Console.WriteLine(obj.Foo); Console.WriteLine(obj.Some);
打印出来的结果是: bar { Key = key, Value = value } 沈星繁 | 园豆:756 (小虾三级) | 2020-05-30 18:38 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。