簡體   English   中英

將隱式類型變量:“ var”傳遞給C#中的函數並返回數組?

[英]Passing an implicit typed variable: “var” to a function in C# and returning an array?

我正在編寫一個函數來分解我的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");

為什么不將參數類型更改為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-var

隱式類型化的局部變量被強類型化,就像您自己已經聲明了類型一樣,但是編譯器會確定類型

您不能將var用作方法中的參數。 編譯器必須能夠確定要交換var的數據類型。

您也不能在方法聲明中包含class關鍵字。

通用答案:創建兩種具有不同簽名的方法,一種使用IEnumerable,另一種使用XDocument。 如果兩者相似,則可以從更特定的版本中調用更通用的版本,或者將一種類型轉換為另一種類型,然后返回傳入新類型的另一種類型的調用。

特定於XDocument和IEnumberable:當然,除非可以將類型(XDocument)隱式轉換為其他類型(IEnumberable),然后僅在簽名中使用更具體的類型(IEnumberable)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM