在我的程序中我正在阅读一个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