1

戻り値の型に関連するフィールドのリストを特定しようとしています (この場合、Ob クラスの "string MyName" と "string 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;
    }
}
4

3 に答える 3

1

これらはプロパティですか、それともフィールドですか?

プロパティの場合は、既にメソッドを取得した方法と同様に、非常に簡単です。

PropertyInfo[] pi = myClType.GetProperties();

フィールドの場合、次のようになります (BindingFlags パラメーターにビットごとの OR を使用):

myClType.GetFields(BindingFlags.Public | BindingFlags.NonPublic);
于 2013-07-11T19:45:44.793 に答える
1

あなたが探しているのはmethodInfo.ReturnType.GetFields()

于 2013-07-11T19:50:18.953 に答える
0

オブジェクトの配列を取得したら、配列MethodInfo内の各要素を反復処理し、MethodInfo.ReturnTypeプロパティをクエリして各関数が返す型を決定できます。

のインスタンスを取得すると、Typeそこに含まれるフィールドを反映して、それぞれのタイプと名前を出力するのは非常に簡単です。

やや面倒な状態チェックを適切な場合に適切なものに置き換えましBindingFlagsた。メソッドが public かどうかを確認する必要がなくなりました。また、メソッドが"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();
}
于 2013-07-11T19:56:32.580 に答える