簡體   English   中英

如何使用反射調用帶有可選參數的方法 c#

[英]How to call Method with optional parameters using reflections c#

我正在調用使用反射的方法。 但是,由於某些要求,方法參數之一已更改,並將新參數保留為可選參數。 這是代碼

Void Method1(string request, string constants, string count = null)

Void Method2(string request, string constants)

在 Method1 中的 count 參數是可選的。對於上述方法,我使用反射調用這里是代碼:

result = methodInfo.Invoke(classInstance, new object[] {request, constants});

我嘗試過以下方法但遇到異常

result = methodInfo.Invoke(classInstance, new object[] {request, constants ,System.Type.Missing});

得到了Method2的異常,上面的代碼適用於Method1

參數計數不匹配。

請向我建議使用反射的方法中的可選參數

提前致謝!

可選參數:實際上不是可選的——所發生的只是編譯器通常會自動為您提供省略的值。 由於您在這里沒有使用編譯器,因此您需要自己提供它,使用new object[] {request, constants, null} 請注意,如果您想正確尊重默認值(而不是在這種情況下知道它是null ),您需要查看ParameterInfo ,特別是.HasDefaultValue.DefaultValue

示例(不使用ParameterInfo ,注意):

using System;
using System.Reflection;

class P
{
    static void Main()
    {
        string request = "r", constants = "c", count = "#";
        var classInstance = new P();

        typeof(P).GetMethod(nameof(Method1),
            BindingFlags.Instance | BindingFlags.NonPublic)
            .Invoke(classInstance, new object[] { request, constants, null });

        typeof(P).GetMethod(nameof(Method1),
            BindingFlags.Instance | BindingFlags.NonPublic)
            .Invoke(classInstance, new object[] { request, constants, count });

        typeof(P).GetMethod(nameof(Method2),
            BindingFlags.Instance | BindingFlags.NonPublic)
            .Invoke(classInstance, new object[] { request, constants });
    }

    void Method1(string request, string constants, string count = null)
        => Console.WriteLine($"#1: {request}, {constants}, {count}");

    void Method2(string request, string constants)
        => Console.WriteLine($"#2: {request}, {constants}");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM