Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Adding Properties to an object at run time
Message
De
06/02/2011 04:24:13
 
 
À
04/02/2011 06:58:30
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Versions des environnements
Environment:
C# 3.0
Divers
Thread ID:
01498603
Message ID:
01498910
Vues:
38
>>>Hi,
>>>
>>>I have an EntityList with the following "fields" App_item, App_Type and App_Value.
>>>
>>>It contains things like:
>>>
>>>"PremiumReminderDays", "I", "10"
>>>"LapseDays", "I", "5"
>>>"CompanyName", "C", "Samaan Systems Ltd."
>>>
>>>I have an AppInfo object that I want to add properties to from this list so I end up with properties like this:
>>>
>>>AppInfo.PremiumReminderDays = 10
>>>AppInfo.LapseDays = 10
>>>AppInfo.CompanyName = "Samaan Systems Ltd."
>>>
>>>How do I do this in C#?
>>
>>A couple of ideas:
>>(a) See the DynamicObject class (actually I think you need .net 4 for that)
>>(b) Use an embedded dictionary. Something like:
public class LooseProperties
>>    {
>>        public Dictionary<string, object> Properties { get; set; }
>>        public LooseProperties() { Properties = new Dictionary<string, object>(); }
>>       // Add other standard properties 
>>    }
then:
LooseProperties lp = new LooseProperties();
>>//To store:
>>lp.Properties.Add("PremiumReminderDays", 1);
>>lp.Properties.Add("CompanyName","Samaan Systems Ltd");
>>//To retrieve:
>>string company = (string) lp.Properties["CompanyName"];
But, TBH, it introduces a lot of opportunities to cause exceptions at run time and, at least to me, smacks of bad design.....
>
>
>Thanks Viv,
>
>I'm open to any advice on a better design. I don't understand why you think it introduces potential problems though, so could you explain that, please? The possible properties will all be defined by me so I will know what is there and what I can use.....

You may know what properties are there but the compiler does not - so it's not going to catch any typos or attempts to cast (either implicitly or explicitly) a value to the wrong type. All those things that could have been caught by the compiler potentially seep into runtime code. If your lucky they will be quickly caught in testing - but you've still wasted time. If your unlucky they can still exist in production code.

> I've just got into the habit of doing things like this in VFP so that I just need to add any new property to the table and it is magically available for me in the code. I suppose I could just make the properties defined ones on an object and just populate them from thetable when I need to. Is that a better design?

Always better to define the properties explicitly unless there is a *very* good reason not to. Perhaps if you explained why you wanted to take this 'dynamic' approach rather than adding properties into the design we could suggest the best way of doing this.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform