Передача неявной типизированной переменной: "var" в функцию в C# и возвращение массива?

Я пишу функцию для break_up моего main(). В частности, в этой функции я буду передавать "var" или неявный экземпляр объекта. 1. Но компилятору это не нравится. Также не очень приятно возвращать массив из этой функции.

Ошибочные сообщения

  1. } ожидается
  2. Не удалось найти тип или имя пространства имен 'var' (отсутствует директива using или ссылка на сборку?)

public class string [] xml_to_array(string tag_name, var select_range, XNamespace xmlns)

{
        string [] ret_array=select_range.Descendants(xmlns+ tag_name)
                            .Select(elem => elem.Value).ToArray();
        return ret_array;
} 

"var select_range" может быть IEnumerable из экземпляра LINQ/SQL stmt:

IEnumerable<XElement> select_range= from result in doc.Descendants(xmlns+ "Assessment")
                           where result.Element(xmlns + "Location").Value.ToLower().Contains(r)
                           select result;

или это может быть тип XDOCUMENT:

 XDocument select_range = XDocument.Load("C:/Users/jake_lane/Documents/parser/ex.xml");

4 ответа

Почему бы не изменить тип параметра на IEnumerable<XElement>:

public string [] xml_to_array(string tag_name, IEnumerable<XElement> select_range, XNamespace xmlns)

И изменить:

XDocument select_range = XDocument.Load
("C:/Users/jake_lane/Documents/parser/ex.xml");

чтобы:

IEnumerable<XElement> select_range = XDocument.Load
("C:/Users/jake_lane/Documents/parser/ex.xml")
.Descendants();

var только для вас, компилятор знает тип - так что вы не можете использовать его в сигнатуре метода

Из MSDN - вар:

Локально типизированная локальная переменная строго типизирована, как если бы вы сами объявили тип, но компилятор определяет тип

Общий ответ: создайте два разных метода с разными сигнатурами, один с IEnumerable, а другой с XDocument. Если оба схожи, вы можете вызвать более общую версию из более конкретной версии или преобразовать один тип в другой тип и вернуть то, что вызывается из другого, передавая новый тип.

Специфично для XDocument и IEnumberable. Если, конечно, типы (XDocument) можно неявно преобразовывать в другие (IEnumberable), а затем просто использовать более специфический тип в своей подписи (IEnumberable).

Вы не можете использовать var для параметров в методах. Компилятор должен быть в состоянии определить тип данных для обмена на var.

Вы также не можете иметь ключевое слово class в объявлении метода.

Другие вопросы по тегам