Передача неявной типизированной переменной: "var" в функцию в C# и возвращение массива?
Я пишу функцию для break_up моего main(). В частности, в этой функции я буду передавать "var" или неявный экземпляр объекта. 1. Но компилятору это не нравится. Также не очень приятно возвращать массив из этой функции.
Ошибочные сообщения
- } ожидается
- Не удалось найти тип или имя пространства имен '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 в объявлении метода.