gpt4 book ai didi

c# - 从 ParameterInfo 获取所有嵌套类型

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:47 26 4
gpt4 key购买 nike

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

最佳答案

您的代码正在查找嵌套类型 - 即在 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

关于c# - 从 ParameterInfo 获取所有嵌套类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com