Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Adding Properties to an object at run time
Message
From
04/02/2011 11:13:15
 
 
To
04/02/2011 06:58:30
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Environment versions
Environment:
C# 3.0
Miscellaneous
Thread ID:
01498603
Message ID:
01498763
Views:
34
I think Viv's idea of a dictionary is a good one, but I'd go one step further and use an enum rather than a string.
public class LooseProperties
{
    public Dictionary<LPEnum, object> Properties { get; set; }
    public LooseProperties() { Properties = new Dictionary<LPEnum, object>(); }
}
// and the Enum
public enum LPEnum
{
    PremiumReminderDays,
    CompanyName,
    LapseDays
}
then:
LooseProperties lp = new LooseProperties();
//To store:
lp.Properties.Add(LPEnum.PremiumReminderDays, 1);
lp.Properties.Add(LPEnum.CompanyName,"Samaan Systems Ltd");
//To retrieve:
string company = (string) lp.Properties[LPEnum.CompanyName];
That at least makes it a little less likely to cause a runtime exception because of typos, although if you cast the object incorrectly it will still crash.

~~Bonnie




>>>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, 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?
Bonnie Berent DeWitt
NET/C# MVP since 2003

http://geek-goddess-bonnie.blogspot.com
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform