如何遍历传递给方法的类并在C#中检索其属性值

RunninThruLife

首先,请原谅我这个问题是否对网站上的其他信息有所帮助。我浏览了其他有关反思的文章,但就我在做什么似乎似乎没有任何意义。

想法是将一个方法传递给一个类,然后遍历该对象的属性并将其值分配给一个返回值。该返回值稍后将用于动态创建SQL语句。我已经使用PropertyInfo创建了循环,并且能够基于switch语句来判断属性的类型。问题是,一旦我在特定情况下使用该属性,就很难确定如何将特定的属性值分配给列表,以便稍后返回。这是我的代码,在此先感谢您的帮助。

    public List<string> BuildParametersFromObject(clsBook oBook, clsStudent oStud)
    {
        List<string> lstRetVal = new List<string>();
        string sTemp = "";
        string sPropType = "";
        int ii;
        if (oBook == null)
        {
            PropertyInfo[] ObjProperties = typeof(clsStudent).GetProperties();
            foreach (PropertyInfo StudProp in ObjProperties)
            {
                ii = 0;
                sPropType = Convert.ToString(StudProp.PropertyType);
                switch (sPropType)
                {
                    case "System.String":
                        lstRetVal.Add(StudProp.GetValue(clsStudent, null));
                        break;
                    case "System.Int32":

                        break;
                    case "System.Decimal":

                        break;
                    case "System.Boolean":

                        break;
                    case "System.DateTime":

                        break;
                }

            }
        }
        return lstRetVal;
    }
爱德华·杜米特鲁(Eduard Dumitru)

您的代码无法编译,因为

StudProp.GetValue(clsStudent, null)

要求它的第一个参数是对象,而您要给该方法最确定的是类符号。

其次,我试图了解您打算对两个参数执行的操作:

  • clsBook oBook
  • clsStudent oStud

从您在那里写的内容我知道,如果oBook不为null,则可以将结果添加到返回列表中。我现在就保留它。

第二大问号是是否需要该oStud参数。

说你解决编制问题,而你的代码编译。如果您尝试完全删除参数,即

public List<string> BuildParametersFromObject(clsBook oBook, clsStudent oStud)

变成

public List<string> BuildParametersFromObject(clsBook oBook)

您会注意到您的方法仍然可以编译,因此您没有使用oStud

您正在枚举 clsStudent

如果您不确定我在说什么,则可以执行以下操作:

修改方式

// prepare your little filter
private static readonly Type[] allowedTypes = new Type[] { 
    typeof(bool), typeof(string), typeof(int), 
    typeof(decimal), typeof(DateTime)
};

public List<string> BuildParametersFromObject(clsBook oBook, clsStudent oStud)
{
    List<string> lstRetVal = new List<string>();
    string sTemp = "";
    string sPropType = "";
    int ii;
    if (oBook == null)
    {

        PropertyInfo[] ObjProperties = typeof(clsStudent).GetProperties();
        foreach (PropertyInfo StudProp in ObjProperties)
        {
            // if the property's type is not one of the 5 magnificence
            // simply jump to the next cycle of the foreach loop
            if (!allowedTypes.Contains(StudProp.PropertyType)) 
                continue;

            object pureValue = StudProp.GetValue(oStud);
            // what you were using is not ok: StudProp.GetValue(clsStudent)
            // because you're trying to retrieve the value of a property
            // defined by the clsStudent class
            // and in the process you also need to point out an instance
            // of that particular class, but instead of doing that
            // you were pointing out an instance of Type i.e. clsStudent itself

            string stringValue = pureValue + "";
            // simply concatenate the pureValue with a blank string
            // (allowing imminent nulls to be displayed as empty strings instead of crashing your thread with NullReferenceException)

            lstRetVal.Add(stringValue);
            // just add your stringified value to the list

        }


    }
    return lstRetVal;
}

解释

我所做的是,将您的显式过滤(使用switch修改为原始数组(您希望在添加结果中支持的类型的列表),并且由此我也删除了不必要且完全困难的部分保持类型的“按名称比较”。比较类型和它们本身的类型要干净得多。世界上可能有RunninThruLife,但只有一个是您。

最大的错误是,您不是从clsStudent实例获取属性的值,而是从clsStudent本身(这是一个类)获取属性的值。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将空值传递给C#中Object和String作为参数的重载方法

来自分类Dev

获取作为基类传递给泛型方法的派生C#类的属性

来自分类Dev

如何将方法参数传递给方法的属性值?

来自分类Dev

C#设置通过Func <T>传递给方法的属性的属性值

来自分类Dev

将类属性传递给方法C#

来自分类Dev

如何从SQL Server数据库中检索数据并在C#中对其进行操作?

来自分类Dev

如何将组合框值作为参数传递给C#中的Crystal Report

来自分类Dev

通过引用传递给python(áC ++)中的类的参数,以使用类方法对其进行修改

来自分类Dev

C#将类作为参数传递给方法,并在其中调用静态方法

来自分类Dev

如何遍历类对象并更改Python中的属性值

来自分类Dev

如何遍历自制字典并在DJANGO模板中访问其属性?

来自分类Dev

如何将值从方法的角度传递给属性

来自分类Dev

如何将当前循环值传递给Tapestry中的类方法?

来自分类Dev

如何在while循环中将数据读取器中的值传递给C#中的方法

来自分类Dev

在将值类型传递给C#中的方法时进行更改

来自分类Dev

Python,类没有属性。如何返回已传递给类的值的值?

来自分类Dev

如何在C#中遍历泛型类的属性?

来自分类Dev

如何从Swift将可选值传递给目标C类

来自分类Dev

如何从C#中的特定元素值中检索属性值

来自分类Dev

如何在Python的类中将属性传递给方法?

来自分类Dev

C#将类作为参数传递给方法,并在其中调用静态方法

来自分类Dev

如何使用Swig将TCL脚本中的枚举值传递给C ++类

来自分类Dev

如何将List <>传递给Javascript并在组合框C#中显示

来自分类Dev

C#将子对象传递给要用基类的通用属性填充的方法

来自分类Dev

如何在C#中将变量的名称传递给函数并返回其值?

来自分类Dev

如何将属性值传递给 SAPUI5 中的 init 方法?

来自分类Dev

C#如何将未知值变量(用户输入)传递给返回方法

来自分类Dev

在 C# 中传递的类值

来自分类Dev

C# - 如何将数组中的元素传递给类中的属性

Related 相关文章

  1. 1

    将空值传递给C#中Object和String作为参数的重载方法

  2. 2

    获取作为基类传递给泛型方法的派生C#类的属性

  3. 3

    如何将方法参数传递给方法的属性值?

  4. 4

    C#设置通过Func <T>传递给方法的属性的属性值

  5. 5

    将类属性传递给方法C#

  6. 6

    如何从SQL Server数据库中检索数据并在C#中对其进行操作?

  7. 7

    如何将组合框值作为参数传递给C#中的Crystal Report

  8. 8

    通过引用传递给python(áC ++)中的类的参数,以使用类方法对其进行修改

  9. 9

    C#将类作为参数传递给方法,并在其中调用静态方法

  10. 10

    如何遍历类对象并更改Python中的属性值

  11. 11

    如何遍历自制字典并在DJANGO模板中访问其属性?

  12. 12

    如何将值从方法的角度传递给属性

  13. 13

    如何将当前循环值传递给Tapestry中的类方法?

  14. 14

    如何在while循环中将数据读取器中的值传递给C#中的方法

  15. 15

    在将值类型传递给C#中的方法时进行更改

  16. 16

    Python,类没有属性。如何返回已传递给类的值的值?

  17. 17

    如何在C#中遍历泛型类的属性?

  18. 18

    如何从Swift将可选值传递给目标C类

  19. 19

    如何从C#中的特定元素值中检索属性值

  20. 20

    如何在Python的类中将属性传递给方法?

  21. 21

    C#将类作为参数传递给方法,并在其中调用静态方法

  22. 22

    如何使用Swig将TCL脚本中的枚举值传递给C ++类

  23. 23

    如何将List <>传递给Javascript并在组合框C#中显示

  24. 24

    C#将子对象传递给要用基类的通用属性填充的方法

  25. 25

    如何在C#中将变量的名称传递给函数并返回其值?

  26. 26

    如何将属性值传递给 SAPUI5 中的 init 方法?

  27. 27

    C#如何将未知值变量(用户输入)传递给返回方法

  28. 28

    在 C# 中传递的类值

  29. 29

    C# - 如何将数组中的元素传递给类中的属性

热门标签

归档