2017-01-10 1 views
2

Я хотел бы вызвать этот метод:Как я могу вызвать метод, который имеет Params строки [], как его только parammeter без посыла значения

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

Но большую часть времени я не буду загружать реляционные объекты, поэтому я хотел бы, чтобы вызвать его без значений entitiesToLoad посыла, как это:

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

Но он бросает исключение, сог числа параметра не эквивалентно

есть ли способ выполнить Тхи s без изменения строки params [] на другой тип параметра?

Я пробовал string entitiesToLoad = null as parammeter, у меня такая же ошибка.

+0

прохода пустой строки массив –

+0

почему вы не просто передать 'новой строка [0]'? – nozzleman

+0

новая строка [0] бросила ту же ошибку –

ответ

5

Передайте пустой массив, потому что это то, что C# компилятор будет проходить, когда указывает на отсутствие аргументов для VARIADIC метода:

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

Заметим, что вам придется обернуть массив строк в массив объектов, потому что этот массив объектов представляет список аргументов. Первый переданный аргумент - это пустой массив строк.

+0

У меня такая же ошибка = ( –

+0

@RaphaelRibeiro: Я думаю, вам нужно обернуть пустой массив строк в массив объектов. Я обновил ответ соответственно. –

+0

Я отмечу это как ответ , это уродливо, но ... Спасибо. –

2

Кажется, что это идеальный сценарий для использования перегрузки методов. Если вам не нужно значение, поэтому, чтобы отправить его ?:

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

public IEnumerable<TEntity> SelectAll() 
{ 
    //... 
} 
+0

Я бы хотел использовать как необязательный –

+0

Было бы намного чище, если вам это не нужно, вы просто не отправляете его. Но если вы настаиваете на этом, вы может просто задаваться как необязательный, и он должен работать так, как я протестировал его public IEnumerable SelectAll (string [] entitiesToLoad = null) – NicoRiff

+0

Можете ли вы показать строку, которую вы вызываете методом, я получил ту же ошибку здесь. –