0

我正在编写一个函数来分解我的 main()。具体来说,在这个函数中,我将传递一个“var”或对象的隐式实例。1.但是编译器对此并不满意。2。它也不喜欢从此函数返回一个数组。

错误消息

  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”可以是来自 LINQ/SQL stmt 实例的 IEnumerable:

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

4 回答 4

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();
于 2013-06-06T22:04:21.017 回答
1

var 只适合你,编译器知道类型 - 所以你不能在方法签名中使用它

来自MSDN - var

隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定类型

于 2013-06-06T21:58:01.173 回答
0

通用答案:创建两种具有不同签名的不同方法,一种使用 IEnumerable,另一种使用 XDocument。如果两者相似,您可以从更具体的版本调用更通用的版本,或者将一种类型转换为另一种类型并返回从另一个传入新类型调用的内容。

特定于 XDocument 和 IEnumberable:当然,除非类型 (XDocument) 可以隐式转换为其他类型 (IEnumberable),否则只需在您的签名中使用更具体的类型 (IEnumberable)。

于 2013-06-06T23:26:47.217 回答
0

您不能将 var 用于方法中的参数。编译器必须能够确定要交换 var 的数据类型。

您也可以在方法声明中没有 class 关键字。

于 2013-06-06T21:55:03.033 回答