是否可以使用类属性给出一个整数来表示同一类中的序列?

时间:2018-12-23 23:22:37

标签: c# reflection

此刻,我正在使用我的班级属性来存储信息。 为了确保可以使用类和索引确定填充数据的正确顺序(顺序),建议使用Attributes(属性0将获得索引0,依此类推)。使用CallerLineNumber效果很好。 这是我的示例:

[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; }   
}

有了属性,我可以使用以下命令获取序列:

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;

我也在寻找的是,有可能获得一个整数,该整数充当类中属性的索引。 示例:

    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];

0和3给出了split [n]中需要的序列。 但是,如果我想使用类似GetIndex的方法,那将非常有帮助:

    MyClass myClass = new MyClass();
    string var1_alt = dataSplit[GetIndex(myClass.string1)];
    string var4_alt = dataSplit[GetIndex(myClass.string4)];

使用该类的属性返回表示其在类中位置的整数(类似于枚举)。我想使用myClass.string1作为类属性来获取索引,而不是将其保存为提交时的字符串值。

我们将不胜感激。
注意:我使用的是C#4.5.2,无法向上移动。另外,仅限使用System

0 个答案:

没有答案