是否有一种简单的方法可以通用地从字符串中解析数据以获取C#中不同类型的子类属性?

达米安

我有一个基础课

abstract public class containerClass {
    protected containerClass () {
        // do stuff
    }

    virtual protected void parseData() {
        // do the stuff I'm mentioning later
    }
}

和儿童班

public class childClassOne : containerClass {
    public childClassOne () : base () {
        var1S = "99";
        var2S = "88.3";
        var3S = "2015-04-22T15:55:25.2625065-07:00";
    }
    public int var1 {get; protected set;}
    public double var2 {get; protected set;}
    public DateTime var3 {get; protected set;}

    public string var1S {get; protected set;}
    public string var2S {get; protected set;}
    public string var3S {get; protected set;}
}

public class childClassTwo : containerClass {
    public childClassTwo () : base () {
        var1S = "99.22";
        var2S = "88.3";
        var3S = "43.44";
    }
    public double var1 {get; protected set;}
    public double var2 {get; protected set;}
    public double var3 {get; protected set;}

    public string var1S {get; protected set;}
    public string var2S {get; protected set;}
    public string var3S {get; protected set;}
}

我想做的是在父类中定义parseData,以在子类调用它时遍历属性,并解析字符串以获取相关数据。

订单需要保留。字符串可能是外部数据,而不是这些类的属性或字段。

我目前在伪代码中的想法是这样的:

for (property prop in thisClass)
{
    typeof(prop) temp;
    if (typeof(prop).tryParse(var1S, temp))
        prop = temp;
}

我正在查看的所有类都有一个带有两个输入变量的tryParse方法。我想做的工作可以吗?如果是这样,我如何以明确的顺序遍历属性?

肖恩·卢汀(Shaun Luttin)

简单的?可能吗?是的。

我想做的是在父类中定义parseData,以在子类调用它时遍历属性,并解析字符串以获取相关数据。

以下是问题的第一部分。这是个小玩意儿

virtual protected void parseData()
{
    // iterate through the properties when it's called by a child class
    foreach(var p in this.GetType().GetProperties())
    {
        // and parse the strings for relevant data
        var propName = p.Name;
        var propValue = p.GetValue(this);
        Console.WriteLine(string.Format("{0} = {1}", propName, propValue));
    }
}

订单需要保留。

这不再是简单的地方。MSDN说: “不能保证返回的集合的顺序在调用之间是相同的。”

这个问题“ Type.GetProperties”属性顺序有一个答案,建议使用自定义属性来保留顺序。可能看起来像这样:

[System.AttributeUsage(System.AttributeTargets.Property)]
public class ProperyOrderAttribute : System.Attribute
{
    public int Order { get; private set; }

    public ProperyOrderAttribute(int order)
    {
        this.Order = order;
    }
}

您将在属性上使用它。

[ProperyOrderAttribute(0)]
public int var1 { get; protected set; }

您可以像这样比较它:

protected Comparison<PropertyInfo> comparer = (x,y) => {
    var type = typeof(ProperyOrderAttribute);
    var xAttr = x.GetCustomAttributes(type, false);
    var yAttr = y.GetCustomAttributes(type, false);
    var xOrder = xAttr.Count() > 0 ? 
        (xAttr[0] as ProperyOrderAttribute).Order : 
        Int64.MaxValue;
    var yOrder = yAttr.Count() > 0 ? 
        (yAttr[0] as ProperyOrderAttribute).Order : 
        Int64.MaxValue;
    return xOrder.CompareTo(yOrder);
};

这是parseData()保留顺序的最终方法的工作方式:

virtual protected void parseData()
{
    var properties = this.GetType().GetProperties();

    // maintain the order
    Array.Sort(properties, comparer);

    // iterate through the properties when it's called by a child class
    foreach (var p in properties)
    {
        // and parse the strings for relevant data
        var propName = p.Name;
        var propValue = p.GetValue(this);
        Console.WriteLine(string.Format("{0} = {1}", propName, propValue));
    }
}

再次,这个小提琴演示了完整的解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果元素没有属性并且 getText() 返回空字符串,是否有另一种方法可以从元素中获取文本?

来自分类Dev

在C#中更改属性后,是否有一种简单的方法可以清空文本框?

来自分类Dev

是否有一种方法可以从NSManagedObject数组获取特定属性的字符串数组

来自分类Dev

有没有一种简单的方法可以将小数格式化为sql中的字符串

来自分类Dev

有没有一种简单的方法可以将小数格式化为sql中的字符串

来自分类Dev

在 Scala 中,是否有一种简单的方法可以根据函数的结果获取不同的元素列表?

来自分类Dev

在ada编程语言中,是否有一种方法可以创建一个采用不同类型的枚举的子类型?

来自分类Dev

有没有一种方法可以使C#在同一行中读取整数和字符串?

来自分类Dev

在Excel中,是否有一种方法可以显示包含文本字符串的单元格的数据透视表计数?

来自分类Dev

是否有一种简单的方法可以将整数字符串转换为单个整数

来自分类Dev

有没有一种简单的方法可以将唯一的字符串转换成JavaScript中的唯一数字?

来自分类Dev

Microsoft Word中是否有一种方法可以用字符串“ 1”,“ 2”,“ 3”等搜索和替换字符串“ 01”,“ 02”,“ 03”?

来自分类Dev

有没有一种简单的方法可以将数字转换为字符串中的浮点数?

来自分类Dev

在Racket中,有没有一种简单的方法可以将字符串转换为变量名(标识符)?

来自分类Dev

在Racket中,有没有一种简单的方法可以将字符串转换为变量名(标识符)?

来自分类Dev

是否有一种简单的方法可以从终端对文件中单词中的字符进行计数?

来自分类Dev

在Oracle 8上的Sentence Case中是否有一种简单的方法来转换字符串?还是应该使用正则表达式?

来自分类Dev

有没有一种方法可以检测字符串在PHP或symfony中是否具有有效的HTML语法?

来自分类Dev

是否有一种算法可以找到字符串中任何指定字符的首次出现?

来自分类Dev

有没有一种方法可以将“字符串数组”设置为函数中参数的类型?

来自分类Dev

有没有一种方法可以在Python中对字符串中的特定序列进行分组?

来自分类Dev

是否有一种方法可以从Eclipse CDT断点操作中的log操作中打印格式化的字符串?

来自分类Dev

C#是否有一种解析int的方法,同时跟踪解析的字符数?

来自分类Dev

有没有一种方法可以获取在BERT中已生成特定令牌的子字符串的位置?

来自分类Dev

是否有一种简单的方法可以删除角色中的所有成员

来自分类Dev

是否有一种简单的方法可以删除角色中的所有成员

来自分类Dev

有没有一种简单的方法可以从 C++ 中的路径获取文件名?

来自分类Dev

有没有一种简单的方法可以在 python 中获取文本输入字段?

来自分类Dev

有没有一种简单的方法可以在 Kotlin 中通过 _id 获取对象?

Related 相关文章

  1. 1

    如果元素没有属性并且 getText() 返回空字符串,是否有另一种方法可以从元素中获取文本?

  2. 2

    在C#中更改属性后,是否有一种简单的方法可以清空文本框?

  3. 3

    是否有一种方法可以从NSManagedObject数组获取特定属性的字符串数组

  4. 4

    有没有一种简单的方法可以将小数格式化为sql中的字符串

  5. 5

    有没有一种简单的方法可以将小数格式化为sql中的字符串

  6. 6

    在 Scala 中,是否有一种简单的方法可以根据函数的结果获取不同的元素列表?

  7. 7

    在ada编程语言中,是否有一种方法可以创建一个采用不同类型的枚举的子类型?

  8. 8

    有没有一种方法可以使C#在同一行中读取整数和字符串?

  9. 9

    在Excel中,是否有一种方法可以显示包含文本字符串的单元格的数据透视表计数?

  10. 10

    是否有一种简单的方法可以将整数字符串转换为单个整数

  11. 11

    有没有一种简单的方法可以将唯一的字符串转换成JavaScript中的唯一数字?

  12. 12

    Microsoft Word中是否有一种方法可以用字符串“ 1”,“ 2”,“ 3”等搜索和替换字符串“ 01”,“ 02”,“ 03”?

  13. 13

    有没有一种简单的方法可以将数字转换为字符串中的浮点数?

  14. 14

    在Racket中,有没有一种简单的方法可以将字符串转换为变量名(标识符)?

  15. 15

    在Racket中,有没有一种简单的方法可以将字符串转换为变量名(标识符)?

  16. 16

    是否有一种简单的方法可以从终端对文件中单词中的字符进行计数?

  17. 17

    在Oracle 8上的Sentence Case中是否有一种简单的方法来转换字符串?还是应该使用正则表达式?

  18. 18

    有没有一种方法可以检测字符串在PHP或symfony中是否具有有效的HTML语法?

  19. 19

    是否有一种算法可以找到字符串中任何指定字符的首次出现?

  20. 20

    有没有一种方法可以将“字符串数组”设置为函数中参数的类型?

  21. 21

    有没有一种方法可以在Python中对字符串中的特定序列进行分组?

  22. 22

    是否有一种方法可以从Eclipse CDT断点操作中的log操作中打印格式化的字符串?

  23. 23

    C#是否有一种解析int的方法,同时跟踪解析的字符数?

  24. 24

    有没有一种方法可以获取在BERT中已生成特定令牌的子字符串的位置?

  25. 25

    是否有一种简单的方法可以删除角色中的所有成员

  26. 26

    是否有一种简单的方法可以删除角色中的所有成员

  27. 27

    有没有一种简单的方法可以从 C++ 中的路径获取文件名?

  28. 28

    有没有一种简单的方法可以在 python 中获取文本输入字段?

  29. 29

    有没有一种简单的方法可以在 Kotlin 中通过 _id 获取对象?

热门标签

归档