在我的程序中我正在閱讀一個excel表格,並且正在做一些linq選擇,這很好。在if語句之前初始化一個對象
問題:我試圖通過應用If語句進行預選。變量將在每種情況下分配(if/else),但編譯器沒有看到。編譯器告訴我初始化VAR beforehands但是當我嘗試,我失敗了,因爲我只用像刺痛,int或double,我可以輕鬆地分配beforehands變量:
//This function takes the downloaded xlsx and makes selection of applicable items
var excel = new ExcelQueryFactory("list.xlsx");
//get all items with discount
if (onlyAcceptDiscountedItems == true)
{
var discounts = from s in excel.Worksheet()
where s["Discount/Premium"].Cast<string>().StartsWith("-")
select s;
}
else
{
var discounts = excel.Worksheet();
}
if (discounts.Count() != 0)
{
//some application logic comes here
}
當我試圖做到這一點這樣的:
var excel = new ExcelQueryFactory("list.xlsx");ter code here
var discounts = excel.Worksheet();
if (onlyAcceptDiscountedItems == true)
{
discounts = from s in excel.Worksheet()
where s["Discount/Premium"].Cast<string>().StartsWith("-")
select s;
}
if (discounts.Count() != 0)
{
//some application logic comes here
}
我收到以下錯誤在第二codesnippet的第5行:
錯誤CS0266無法隱式轉換類型 'System.Linq.IQueryable' 到 'LinqToExcel.Query.ExcelQueryable'。一個明確的 轉換不存在(是否缺少強制轉換?)
這就是爲什麼'var'應該只在暗示類型時才使用。你的LINQ語句的結果與'excel.Worksheet()'不一樣的類型。 – maccettura
@hnefatl我相信它是一樣的,因爲我可以在沒有任何問題的情況下使用它們。 –
在你的第一個'if .. else'循環中,你正在創建一個局部變量。因此_「變量將在所有情況下分配」_不是真的 - 在每種情況下分配一個**不同的**局部變量。這就是編譯器抱怨的原因。 – stuartd