2012-04-30 4 views
2

Для приложения, над которым я работаю, я пытаюсь отобразить шаблон, который покажет, как выглядят параметры для метода (определенного для выполнения). В тестовом примере, на котором я работаю, должно отображаться «PERSON = (FIRST = first; LAST = last)», где параметр с именем Person имеет тип Name, а Name имеет два свойства First и Last. Следующий код вместо этого показывает «PERSON =();».Получение всех вложенных типов из ParameterInfo

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

ответ

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

Я думаю, что ваша ситуация гораздо больше похож на второй, чем первый ... поэтому используйте Type.GetProperties вместо Type.GetNestedTypes.

+1

На лбу изображена красная, ручная фигура. Спасибо что подметил это. – user1269310

Смежные вопросы