I'm using my class properties to store information at the moment. To make sure I can determine the right sequence (order) to fill the data using the class and an index, I was advised to use Attributes (property 0 will get index 0, etc). It works very well using the CallerLineNumber
. This is my example:
[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
public sealed class OrderAttribute : Attribute
{
private readonly int order_;
public OrderAttribute([CallerLineNumber]int order = 0)
{
order_ = order;
}
public int Order { get { return order_; } }
}
public class MyClass
{
[Order] public string string1 { get; set; }
[Order] public string string2 { get; set; }
[Order] public string string3 { get; set; }
[Order] public string string4 { get; set; }
}
With the Attributes, I can get the sequence using:
var properties = from property in typeof(MyClass).GetProperties()
where Attribute.IsDefined(property, typeof(OrderAttribute))
orderby ((OrderAttribute)property
.GetCustomAttributes(typeof(OrderAttribute), false)
.Single()).Order
select property;
What I'm looking also, is to have the possibility to get an integer that acts as the index of the property in the class. Example:
string stringData = string.Format("A{0}B{0}C{0}D", "\t"); //usually my data comes in multiple strings like this
var dataSplit = stringData.Split('\t');
string var1 = dataSplit[0];
string var4 = dataSplit[3];
Where 0 and 3 give me the sequence I need from the split[n]. But, if I would like to have something like a GetIndex
method, that would be extremely helpful:
MyClass myClass = new MyClass();
string var1_alt = dataSplit[GetIndex(myClass.string1)];
string var4_alt = dataSplit[GetIndex(myClass.string4)];
Use the property of that class to return the integer that represents its position in the class (similar to an enum). I would like to use myClass.string1
as the class property to get the index and not as the string value it holds when filed.
I'll appreciate any help.
Aucun commentaire:
Enregistrer un commentaire