如何调用以params string []作为其唯一参数而没有发送值的方法

问题描述 投票:2回答:2

我想调用此方法:

public IEnumerable<TEntity> SelectAll(params string[] entitiesToLoad)

但是,在大多数情况下,我不会加载关系实体,因此我想在不发送sendsToToTo值的情况下调用它,如下所示:

var dbResult = methodInfo.Invoke(repository, null);

但是会抛出异常,因为参数的数量不相等。

是否有一种方法可以将参数字符串[]更改为另一种类型的参数?

我尝试了string entitiesToLoad = null as parammeter,但遇到相同的错误。

c# system.reflection
2个回答
6
投票

传递一个空数组,因为这是C#编译器在不为可变参数方法指定参数时将传递的内容:

var dbResult = methodInfo.Invoke(repository, new object[] { new string[0] });

请注意,您必须将字符串数组包装到对象数组中,因为该对象数组代表参数列表。然后,第一个传递的参数是空字符串数组。


2
投票

似乎这是使用方法重载的理想方案。如果您不需要该值,为什么要发送它?:

public IEnumerable<TEntity> SelectAll(params string[] entitiesToLoad)
{
     //...
}

public IEnumerable<TEntity> SelectAll()
{
     //...
}
© www.soinside.com 2019 - 2024. All rights reserved.