问题描述
“实体类”可不可以动态添加“字段”和“属性”???比如一个实体类,如下:publicclassEnergyTargetModel{publicstringEnergyYear{get;set;}publicstringEnergySum{get;set;}publicstringEnergyUnitArea{get;set;}publicstringEnergyEveryOne{get;set;}}功能:现在要根据参数“Sum”,给“EnergyTargetModel”类添加几个属性。1、如果“Sum”为“1”,那么“EnergyTargetModel”类不变。2、如果“Sum”为“2”,那么为“EnergyTargetModel”类添加属性“EnergyYear1、EnergySum1、EnergyUnitArea1、EnergyEveryOne1”。3、如果“Sum”为“3”,那么为“EnergyTargetModel”类添加属性“EnergyYear1、EnergySum1、EnergyUnitArea1、EnergyEveryOne1、EnergyYear2、EnergySum2、EnergyUnitArea2、EnergyEveryOne2、”。4、以此类推,动态为“EnergyTargetModel”类添加属性,并且确保动态修改后的类可以被实例化为List<EnergyTargetModel>实体集合。您是不是感觉这样的需求很怪异。。。应该怎样做呢???最好有实例可以参考。。。感激不尽。。。
解决方案
解决方案二:
通过定义实体集之间的关系可以实现吗???
解决方案三:
该回复于2012-08-06 10:36:29被版主删除
解决方案四:
给类加属性还是给类对象加属性?
解决方案五:
参阅System.Reflection.Emit命名空间难度相当大,楼主,挽尊。
解决方案六:
请问怎么给类对象添加属性?引用3楼的回复:
给类加属性还是给类对象加属性?
解决方案七:
额,类都编译好了还能添加吗?
解决方案八:
引用5楼的回复:
请问怎么给类对象添加属性?引用3楼的回复:给类加属性还是给类对象加属性?
你先告诉我,你添加了属性别人怎么用?反射吗?在设计时调用者根本不知道你有这个属性,C#毕竟不是动态语言。
解决方案九:
引用7楼的回复:
引用5楼的回复:请问怎么给类对象添加属性?引用3楼的回复:给类加属性还是给类对象加属性?你先告诉我,你添加了属性别人怎么用?反射吗?在设计时调用者根本不知道你有这个属性,C#毕竟不是动态语言。
所以我才问:给类加属性还是给类对象加属性?
解决方案十:
做几个具有有所属性的EnergyTargetModel类然后继承隐藏不要的属性
解决方案十一:
引用8楼的回复:
引用7楼的回复:引用5楼的回复:请问怎么给类对象添加属性?引用3楼的回复:给类加属性还是给类对象加属性?你先告诉我,你添加了属性别人怎么用?反射吗?在设计时调用者根本不知道你有这个属性,C#毕竟不是动态语言。所以我才问:给类加属性还是给类对象加属性?
给“类的对象”添加属性。。。
解决方案十二:
不知道DLR可不可以做这样子的需求~~~~
解决方案十三:
我们曾经有一个需求最后是用的依赖属性解决的,不过解决了之后带了其它设计上的问题,一直再考虑换方式去解决.如果楼主真的有兴趣的话可以自己实现一个依赖属性的整个结构,因为C#自身的依赖属性是有局限的,毕竟设计的出发点不一样.
解决方案十四:
用entityframework添加字段设置为可以为空。。随便你添加,不用修改任何代码。如果手写3层,添加字段要累死人呢。
解决方案十五:
System.Runtime.CompilerServices.ConditionalWeakTable可能能實現
解决方案:
如果只是一个EnergyTargetModel,为什么不用继承。如果有一堆的EnergyTargetModel,可以用组合。当然最好是用代码生成都给生成好。
解决方案:
加一个arraylist字段,随时添加
解决方案:
试试dynamic怎么样。
解决方案:
或者干脆把已知类型全都定义好继承EnergyTargetModel
解决方案:
感觉LZ的设计思想有问题。写程序写到这一步,就不要再考虑一个“完整”的实体类来装你的数据了。再说了,实体类本来是用来和数据库打交道的。你的动态实体类,难道要动态对应到某个表?宁可多写几个case多写几个ifelse来确定某个类。