1

重複の可能性:
リフレクションによるオプションのパラメーターを持つメソッドの呼び出し
c# のコンストラクター引数の名前

現在、リフレクションを使用してオブジェクトを構築しています。これを使用して API ドキュメントに記入しています。多くの場合、デフォルト以外のコンストラクターが必要ですが、オプションのパラメーターがある場合もあります。これらのオプションのパラメーターは、デフォルト以外の新しいオブジェクトでオーバーライドする必要があります。問題は、それらを取得する方法がわからないことです。通常のパラメータはconstructorInfo.GetParameters()で簡単ですが、オプションは戻ってこないようです。ここで何か不足していますか?

サンプルコード:

            ConstructorInfo[] constructorInfoList = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public);
            foreach (ConstructorInfo constructorInfo in constructorInfoList)
            {
                var parameters = constructorInfo.GetParameters();
                if (parameters.Count() > 0)
                {

回答: 戻ってくることが判明しました... これはユーザー エラーです。

サンプル:

void Main()
{
    var ctors = typeof(Foo).GetConstructors();
    foreach(var ctor in ctors)
    {
        foreach(var param in ctor.GetParameters())
        {
            Console.WriteLine("Name: {0} Optional: {1}", param.Name, param.IsOptional);
        }
    }   
}

public class Foo
{
    public Foo(string option1, string option2 = "")
    {
    }
}

出力:

名前: オプション 1 オプション: False 名前: オプション 2 オプション: True

4

2 に答える 2

1

重複の可能性あり。パラメータを呼び出すことはできるようですが、値を手動で設定する必要があります。

ここで同様の問題を見つけました:

リフレクションによるオプションのパラメーターを使用したメソッドの呼び出し

于 2012-06-12T21:38:24.697 に答える
0

ここを参照してください、それは動作します:

var parameterName =
    typeof(Foo)
    .GetConstructor(new[] { typeof(string) })
    .GetParameters()
    .Single().Name;

public class Foo
{
    public Foo(string paramName)
    {   
    }
}
于 2012-06-12T21:28:52.560 に答える