我正在写一个函数来break_up我的main()。具体来说,在这个函数中,我将传递一个对象的“var”或隐式实例。但是编译器对此不满意。它也不喜欢从这个函数返回一个数组。
Err msgs
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;
}
{
string [] ret_array=select_range.Descendants(xmlns+ tag_name)
.Select(elem => elem.Value).ToArray();
return ret_array;
}
“var select_range”可以是来自LINQ / SQL stmt实例的IEnumerable:
或者它可以是XDOCUMENT类型:
IEnumerable<XElement> select_range= from result in doc.Descendants(xmlns+ "Assessment")
where result.Element(xmlns + "Location").Value.ToLower().Contains(r)
select result;
答案 0 :(得分:3)
为什么不将参数类型更改为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();
答案 1 :(得分:1)
答案 2 :(得分:0)
您不能在方法中使用var作为参数。编译器必须能够确定要为其交换var的数据类型。
您也可以在方法声明中使用class关键字。
答案 3 :(得分:0)
通用答案: 使用不同的签名创建两个不同的方法,一个使用IEnumerable,另一个使用XDocument。如果两者相似,则可以从更具体的版本调用更通用的版本,或者将一种类型转换为另一种类型,并返回从传递新类型的另一种类型调用的内容。
特定于XDocument和IEnumberable: 当然,除非类型(XDocument)可以隐式转换为另一个(IEnumberable),否则只需在签名中使用更具体的类型(IEnumberable)。