2014-12-01 5 views
1

У меня есть общий метод, который принимает массив объекта как параметр.Пропустить объект как массив объекта

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

func(new ObjectType(param)); 

Но это не компилируется, как он ожидает массив объекта. Как преобразовать этот объект в массив внутри моего вызова функции? (Требуется ли перегрузка другого конструктора или оператора?)

+1

'new Object [] {object_i_want_in_array}'? Или что-то типа того? Или сделать переопределение функции, чтобы взять только одну? – crashmstr

ответ

4

Я предполагаю, что подпись функции func(object[] items)?

Несколько вариантов:

  • создать новый массив: func(new[] { new ObjectType(param) })

  • добавить новую перегрузку, которая принимает один параметр: func(object item)

  • изменить подпись к params: func(params object[] items). Это бы массив или нуль нескольких объектов (например func(item1, item2, item3))

+0

Для первого варианта я переопределил конструктор по умолчанию. Поэтому я полагаю, что это не сработает. 3-й вариант кажется хорошим – Saksham

+0

Я не уверен, что конструктор имеет к нему отношение. Возможно, вам придется опубликовать еще несколько кода, чтобы выяснить, что такое 'func' и где он объявлен. –

+0

Нет ничего плохого в том, что у меня есть несколько подписей конструктора на C# – Jcl

0

использование сделать из params ключевого слова:

private void MyFunc(params string[] args) 
{ 
    foreach(string s in args) 
    { 
     Console.WriteLine(s); 
    } 
} 

Попробуй как этот

MyFunc("foo"); // pass single string 
MyFunc(new string[] {"foo", "bar"}); // pass array 

Чтобы быть честным , компилятор генерирует код, который создает новый массив с одним элементом, если вы передаете одну строку. Это не должно быть проблемой, за исключением того, что функция очень критична для производительности.

Смежные вопросы