私のプログラムでは、私はExcelシートで読み込み中で、うまくいきました。if文の前にオブジェクトを初期化する
問題:If-ステートメントを適用して事前選択を試みました。変数はすべての場合に割り当てられます(if/else)が、コンパイラはそれを認識しません。コンパイラは、VaRのbeforehandsを初期化するために私に語ったが、私はことをしようとすると、私は、私は簡単にbeforehandsを割り当てることができ刺され、int型またはdoubleなどの変数を使用しておりますので、私は失敗:
//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
}
私は2番目のcodesnippetの5行で、次のエラーが表示されます。
エラーCS0266は、暗黙的ににタイプ 'System.Linq.IQueryable' を変換できません。'LinqToExcel.Query.ExcelQueryable'
あなたが明示的にしたい変数の型を宣言することができ、あなたが初期化することができ、その場合には明示的な 変換が他の人がありますが、私は、3つのオプションを参照してください(?あなたはキャストが欠落している)
これは、型が暗示されているときにのみ 'var'を使うべきであるからです。あなたのLINQ文の結果は、 'excel.Worksheet() 'と同じではありません。 – maccettura
@hnefatl私は同じことを信じています。 –
最初の 'if .. else'ループでは、両方でローカル変数を作成しています。したがって、_変数はすべての場合に割り当てられます_は真ではありません - それぞれ異なるローカル変数**が割り当てられます。だから、コンパイラが不平を言うのです。 – stuartd