我正在尝试确定返回类型中涉及的字段列表(在本例中为“字符串MyName”和来自类Ob的“字符串MyAddress”以及它们各自的文档字符串)。
我到了获得返回类型的阶段,但我尝试的其他任何事情都是给我空白值或抛出异常。有什么建议吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace SampleProf
{
class Program
{
static void Main(string[] args)
{
Sample cl = new Sample();
Type myClType = cl.GetType();
MethodInfo[] methodsInfo = myClType.GetMethods();
List<string> MethodList = new List<string>();
// Iterate through all methods
foreach (MethodInfo methodInfo in methodsInfo)
{
if (methodInfo.IsPublic && methodInfo.Name.Contains("Get") && !methodInfo.Name.Contains("GetType"))
{
if (methodInfo.ReturnType != typeof(void))
{
// Do something here?
}
}
}
Console.Read();
}
}
public class Sample
{
public Ob GetMe()
{
return null;
}
}
public class Ob
{
/// <summary>My name</summary>
string MyName;
/// <summary>My address</summary>
string MyAddress;
}
}
答案 0 :(得分:1)
这些属性或字段?
对于属性,它非常简单,就像你已经检索过方法一样。
PropertyInfo[] pi = myClType.GetProperties();
对于Fields,类似这样(对BindingFlags参数使用按位OR):
myClType.GetFields(BindingFlags.Public | BindingFlags.NonPublic);
答案 1 :(得分:1)
我认为您正在寻找的是methodInfo.ReturnType.GetFields()
答案 2 :(得分:0)
获得MethodInfo
个对象数组后,可以继续迭代数组中的每个元素,查询MethodInfo.ReturnType
属性以确定每个函数返回的类型。
获得Type
的实例后,很容易反映其中包含的字段并分别打印其类型和名称。
在适当的时候,我用适当的BindingFlags
替换了你有点麻烦的条件。您不再需要检查方法是否公开,也不需要检查方法是否被称为“GetType”。
static void Main(string[] args)
{
Sample sampleInstance = new Sample();
Type sampleType = sampleInstance.GetType();
MethodInfo[] sampleMethods =
sampleType.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
foreach (MethodInfo method in sampleMethods)
{
var methodReturnType = method.ReturnType;
if (methodReturnType == typeof(void))
break;
Console.WriteLine(methodReturnType.FullName);
foreach (FieldInfo field in methodReturnType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
{
Console.WriteLine(" {0}: {1}", field.DeclaringType, field.Name);
}
}
Console.Read();
}