|
Not sure if I completely understand what you are looking for. Something like this?
PropertyCollection[Custom1].Value
You could derive a class from CollectionBase
only two letters away from being an asset
|
|
|
|
|
I can't change the existing code with the exception that I can add anything I want to that class. What I want to do for some new UI code is access those properties by an integer index. I want to set and get those properties like normal, but do it through an as yet undefined....something.
I'm not sure what you're suggesting there but I don't think it's access by integer index, sorry if this isn't clear, I'm not sure how else I can explain it.
If this were a new class that I could write however I want to I would start from scratch with a generick List<string> instead of replicating those properties, instead I have to somehow "fake" it instead.
What I've done as a really crappy workaround for now is created separate set and get methods that accept an integer index and through a long switch statement set or get from the existing properties, but this seems inefficient compared to a directly indexed collection. Perhaps a collection of pointers to the properties, I don't know and searching about it is returning nothing but unrelated results.
|
|
|
|
|
Is this closer or am I totally off base
public class Custom1<br />
{<br />
private string m_Test;<br />
<br />
public enum Property<br />
{<br />
Prop1,<br />
Prop2,<br />
Prop3<br />
}<br />
<br />
public string this[Property x]<br />
{<br />
get<br />
{<br />
switch(x)<br />
{<br />
case Property.Prop1:<br />
return Prop1;<br />
default:<br />
return string.Empty;<br />
}<br />
}<br />
set<br />
{<br />
switch(x)<br />
{<br />
case Property.Prop1:<br />
Prop1 = value;<br />
break;<br />
default:<br />
break;<br />
}<br />
}<br />
}<br />
<br />
public string Prop1<br />
{<br />
set{ m_Test = value;}<br />
get { return m_Test; }<br />
}<br />
}<br />
Custom1 c = new Custom1();<br />
c[Custom1.Property.Prop1] = "Hello, World";<br />
<br />
only two letters away from being an asset
|
|
|
|
|
Hi Mark, that's sort of what I do now as a workaround with the switch statement, I want to do this without a switch statement. I've updated my original post to include a sample class of exactly what I mean.
|
|
|
|
|
Without using reflection that is an interesting question. Sorry I can't think of anything at the moment.
only two letters away from being an asset
|
|
|
|
|
Well I guess on the bright side I feel better that it wasn't something simple and obvious.
Thank you for looking at it, I appreciate it.
|
|
|
|
|
You mean like a List of delegates?
led mike
|
|
|
|
|
No I don't think so, delegates would be used with methods, not properties within the same class.
Maybe what I'm looking for is just not possible without resorting to reflection and string comparison of property names which is not much better than the giant switch statement way of doing it.
|
|
|
|
|
You seem to be eluding to introspection that does exist without all these limitations. Perhaps if you post some code or a link where we could see what you are referring to it might help.
led mike
|
|
|
|
|
Hi Mike I've updated my original post to include a sample class illustrating exactly the problem.
|
|
|
|
|
John Cardinal wrote: //Perhaps what I'm after is storing a list of pointers to the properties in the List or
//Array or whatever collection
I think your switch statement approach is fine; it's the way I'd do it. If you wanted to get fancy, you could initialize an array with anonymous methods that delegate to the propery:
using System;
using System.Collections.Generic;
using System.Text;
namespace PropertyTest
{
class Program
{
static void Main(string[] args)
{
Example e = new Example();
e[0] = 42;
e[1] = 3;
Console.WriteLine(e[0]);
Console.WriteLine(e[1]);
Console.Read();
}
}
public class Example
{
delegate int PropertyGetter();
delegate void PropertySetter(int value);
private int prop1 = 0;
private int prop2 = 0;
private List<PropertyGetter> getters = new List<PropertyGetter>();
private List<PropertySetter> setters = new List<PropertySetter>();
public Example()
{
getters.Add(delegate()
{
return Property1;
});
getters.Add(delegate()
{
return Property2;
});
setters.Add(delegate(int value)
{
Property1 = value;
});
setters.Add(delegate(int value)
{
Property2 = value;
});
}
public int this[int index]
{
get
{
return getters[index]();
}
set
{
setters[index](value);
}
}
public int Property1
{
get
{
return prop1;
}
set
{
prop1 = value;
}
}
public int Property2
{
get
{
return prop2;
}
set
{
prop2 = value;
}
}
}
}
I'm not sure if there's any real advantage of this approach over a switch statement. It may mean just as much work if not more.
|
|
|
|
|
Interesting, I think this is what I envisioned, but as you say it's probably not any better in the long run. I spent some time a while ago profiling a method that uses a big switch with simple assigments in each case and it was surprisingly slow so I've been avoiding them, but for this code simpler is probably better.
Cheers and thanks for looking at it.
|
|
|
|
|
In 2003 you can have regions automatically expand by settiong Tools->Options Text Editor->C#->Formatting uncheck Collapse Region when files open.
How can I do this in 2005? I can't seem to find the option anywhere I have looked.
File Not Found
|
|
|
|
|
I tend to right click then go to outlining.
Then toggle all outlining
Hope that helps.
Ben
|
|
|
|
|
That will do it; Not as good as the check box but a lot better than clicking on all of those region markers.
File Not Found
|
|
|
|
|
I happen to run across a key stroke combination:
Ctrl + M, O
Ben
|
|
|
|
|
That is more quicker too.
|
|
|
|
|
I don't know the answer to that, but I did find that ctrl-m will toggle a region when you are at the bottom of it on #endregion which I've found very useful.
|
|
|
|
|
Hi all,
I have a program that in it i used a thread to make some rectangles on line (simulation for packets moving in stream) and i make button that supposed to stop packets
when i click it as i abort the thread in button_clicked code but this doesnot work
so i ask if any one knows the reason of this or any suggestions
thanx in advance
Generator
|
|
|
|
|
Have you tried search for article here?
only two letters away from being an asset
|
|
|
|
|
hi,
I am soory but i think nothing is interested to me
from these articles
Generator
|
|
|
|
|
|
hi,
no i click a button that create thread to do some thing
that is still working until i click another button that is supposed to abort it but it is not working
Generator
|
|
|
|
|
The page I linked you to contains all the information you need to accomplish that. After reading it and trying it out if you still have a question reply to this message.
|
|
|
|
|
thanx it seems to be my goal but there is a problem
when run a run time error occurs
"Cross thread operation not valid: Control 'my_form name'
accessed from thread other than the thread it was created on"
!!
Generator
|
|
|
|