gpt4 book ai didi

c# - 如何通过反射执行带有可选参数的私有(private)静态方法?

转载 作者:可可西里 更新时间:2023-11-01 08:54:52 25 4
gpt4 key购买 nike

我有一个带有可选参数的私有(private)静态方法的类。我如何通过反射从另一个类调用它?有一个类似的question ,但它不涉及静态方法或可选参数。

public class Foo {
private static void Bar(string key = "") {
// do stuff
}
}

如何调用 Foo.Bar("test")Foo.Bar()(例如,不传递可选参数)?

最佳答案

C# 中的可选参数值是通过在调用点注入(inject)这些值来编译的。 IE。即使你的代码是

Foo.Bar()

编译器实际上生成了这样的调用

Foo.Bar("")

在查找方法时,您需要将可选参数视为常规参数。

var method = typeof(Foo).GetMethod("Bar", BindingFlags.Static | BindingFlags.NonPublic);

如果您确切地知道要调用该方法的值,您可以执行以下操作:

method.Invoke(obj: null, parameters: new object[] { "Test" });

如果您只有一些参数并且想要使用默认值,您必须检查方法的 ParameterInfo对象以查看参数是否可选以及这些值是什么。例如,要打印出这些参数的默认值,您可以使用以下代码:

foreach (ParameterInfo pi in method.GetParameters())
{
if (pi.IsOptional)
{
Console.WriteLine(pi.Name + ": " + pi.DefaultValue);
}
}

关于c# - 如何通过反射执行带有可选参数的私有(private)静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829478/

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