首页 新闻 搜索 专区 学院

关于匿名类如何动态添加属性的问题!

0
[待解决问题]

这里有一个需求,我需要new一个匿名类,但是我事先不知道其中的属性是什么,现在我要把字典里面的键值赋给它,

最后是想都到这样的一东西

我不知道我这样做是不是合理,或者又其他办法,求告知

爱吃鲸的虾的主页 爱吃鲸的虾 | 初学一级 | 园豆:149
提问于:2020-05-29 17:16
< >
分享
所有回答(7)
0

布吉岛类型,就用object,简单粗暴

猝不及防 | 园豆:2001 (老鸟四级) | 2020-05-29 17:21

object怎么设置属性赋值?现在我要new一个类,但是直接new一个object没有意义

支持(0) 反对(0) 爱吃鲸的虾 | 园豆:149 (初学一级) | 2020-05-29 17:29

@爱吃鲸的虾: 奥,你这个问题应该是不确定参数个数导致不能使用匿名类的问题

支持(0) 反对(0) 猝不及防 | 园豆:2001 (老鸟四级) | 2020-05-29 17:32

@猝不及防: 对啊,感觉我走偏了,应该有其他办法,只是我没想到,我需要一个动态的对象,键值都是可以动态定义的,就非常类似于字典,但是又不是字典

支持(0) 反对(0) 爱吃鲸的虾 | 园豆:149 (初学一级) | 2020-05-29 17:37
1

匿名类是不行的,匿名类必须key和value都确认了。
你可以试试dynamic或者JSON对象,但是不推荐这么干。

守望雲影 | 园豆:32 (初学一级) | 2020-05-29 17:43

dynamic试过,但是它的属性也是要手动去定义的,在不确定属性的情况下也没法用,我现在在试json,我想应该换个思路了

支持(0) 反对(0) 爱吃鲸的虾 | 园豆:149 (初学一级) | 2020-05-29 17:55

@爱吃鲸的虾: 抱歉抱歉,我理解错你的问题了。

按照你说的,就算生成那样的类,你也没办法通过类.属性这样点出来,因为你也不知道属性名。
所以还是只能当成一个类似字典的东西去读,所以这个需求实际是没意义的。

如果你 想要的是这样格式的一个字符串,那就好办了。我记得牛顿json对字典序列化就是那样的结果。

支持(0) 反对(0) 守望雲影 | 园豆:32 (初学一级) | 2020-05-29 18:44
0

这里有一个需求,我需要new一个匿名类。
通常这99.99%是伪需求。

  1. 简单的说,这不是原始需求,而是程序员错误分析,或者以为只能这样解决或造出来的需求。
  2. 说出你的原始需求,要解决的原始问题是什么,可能有100多种解决方案,都不需要解决你现在的问题。
爱编程的大叔 | 园豆:30748 (高人七级) | 2020-05-29 17:59

大佬好,我现在项目里用到了Dapper,一个Orm框架,我想封装一下自己用,现在我写了一条sql语句,类似这样

然后它要传参数@name,@pwd,dapper里给出了这样一个方案

但是我想写成公共的方法,但是userinfo这个类(表名)这个位置定义成泛型类(TEntity)没法实现,lambda没法给他指定字段名。
后面我看了dapper的参数可以直接传一个对象,类似问题里那种,但是现在发现那种匿名对象没法动态生成,所以大佬有什么好的办法吗

支持(0) 反对(0) 爱吃鲸的虾 | 园豆:149 (初学一级) | 2020-05-30 11:21

@爱吃鲸的虾: 传个泛型T,他不香吗?

支持(1) 反对(0) 华临天下 | 园豆:1411 (小虾三级) | 2020-05-30 17:50

@爱吃鲸的虾: 我也建议你可以看一下泛型相关的资料。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30748 (高人七级) | 2020-05-31 22:29
0

可以试试 dynamic

dudu | 园豆:38823 (高人七级) | 2020-05-29 18:42
0

dynamic 不就是干这个事情的么。

dynamic d= new ExpandoObject();
d.anything="aa";
d.any=()=>{};
var kv = (ICollection<KeyValuePair<string, object>>)d;
kv.add("name","cnblogs");
czd890 | 园豆:9611 (大侠五级) | 2020-05-29 22:47
0

看了你的文字描述还是搞不太懂,你能把你想写的公共方法定义出来发上来吗,形如这样:

returnType Function(Input)
会长 | 园豆:9565 (大侠五级) | 2020-05-30 14:55
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 }
沈星繁 | 园豆:990 (小虾三级) | 2020-05-30 18:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册