将一个隐式类型变量:“var”传递给C#中的函数并返回一个数组?

时间:2013-06-06 21:54:00

标签: c# linq methods implicit

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

Err msgs

  1. }预期
  2. 找不到类型或命名空间名称'var'(您是否缺少using指令或程序集引用?)
  3. 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;
    

4 个答案:

答案 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)

var仅供您使用,编译器知道类型 - 因此您无法在方法签名中使用它

来自MSDN - var

  

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

答案 2 :(得分:0)

您不能在方法中使用var作为参数。编译器必须能够确定要为其交换var的数据类型。

您也可以在方法声明中使用class关键字。

答案 3 :(得分:0)

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

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