从参数信息获取所有嵌套类型

本文关键字:嵌套类型 获取 参数信息 | 更新日期: 2023-09-27 18:32:47

对于我正在处理的应用程序,我正在尝试显示一个模板,该模板将显示(运行时确定的)方法的参数是什么样子的。 我正在处理的测试用例应该显示"PERSON = (FIRST = first;LAST = last);",其中名为 Person 的参数具有 Name 类型,Name 具有两个属性 First 和 Last。 以下代码改为显示"PERSON = ();"。

GetNestedType没有返回任何东西,有什么想法吗?

public static string GetParameterTemplate(MethodInfo method)
{
    StringBuilder output = new StringBuilder();
    foreach (ParameterInfo pi in method.GetParameters())
    {
        output.Append(parameterTemplateHelper(pi.Name, pi.ParameterType));
    }
    return output.ToString();
}
private static string parameterTemplateHelper(string pName, Type pType)
{
    string key = pName.ToUpper();
    string value = "";
    if (pType.IsPrimitive)
    {
        // it's a primitive
        value = pName.ToLower();
    }
    else if (pType.IsArray)
    {
        if (pType.GetElementType().IsPrimitive)
        {
            // array of primitives
            value = String.Format("{0}1, {0}2;", pName.ToLower());
        }
        else
        {
            // array of objects
            StringBuilder sb = new StringBuilder();
            foreach (Type t in pType.GetElementType().GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic))
            {
                sb.Append(parameterTemplateHelper(t.Name, t));
            }
            value = String.Format("({0}), ({0});", sb);
        }
    }
    else
    {
        // object
        StringBuilder sb = new StringBuilder();
        Type[] junk = pType.GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic);
        foreach (Type t in pType.GetNestedTypes())
        {
            sb.Append(parameterTemplateHelper(t.Name, t));
        }
        value = String.Format("({0});", sb.ToString());
    }
    string output = key + " = " + value.ToString();
    return output;
}

从参数信息获取所有嵌套类型

您的代码正在寻找嵌套类型 - 即在 Person 中声明的其他类型。这与在Person内寻找房产完全不同。

下面是一个具有嵌套类型的类:

public class Name
{
    public class Nested1 {}
    public class Nested2 {}
}

下面是一个具有属性的类:

public class Name
{
    public string Name { get; set; }
    public string Name { get; set; }
}

我的猜测是,你的情况更像是第二个而不是第一个......所以使用 Type.GetProperties 而不是 Type.GetNestedTypes .