2

私が取り組んでいるアプリケーションの場合、(実行時に決定される) メソッドのパラメーターがどのように見えるかを示すテンプレートを表示しようとしています。私が取り組んでいるテスト ケースは、"PERSON = (FIRST = first; LAST = last);" を表示する必要があります。ここで、Person という名前のパラメーターには Name 型があり、Name には First と Last の 2 つのプロパティがあります。次のコードでは、代わりに「PERSON = ();」が表示されます。

GetNestedTypes は何も返さないのですが、その理由は何ですか?

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

1 に答える 1

2

コードはネストされた型、つまり 内で宣言された他の型を探していますPerson。これは、内でプロパティを探すこととまったく同じではありませんPerson

ネストされた型を持つクラスを次に示します。

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

プロパティを持つクラスは次のとおりです。

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

私の推測では、あなたの状況は最初の状況よりも 2 番目の状況に似ていると思いType.GetPropertiesますType.GetNestedTypes

于 2012-04-30T13:51:15.447 に答える