2016-04-12 10 views
0

このコード行にエラーがあり、すぐにエラーが表示されるため、私はそれに入ることができませんでした。誰でもこのコード行が正確に何をしようとしているのか教えてください。このコード行は何を意味し、どうすればエラーを修正できますか?

var image = ws2.Drawings.AddPicture(
    imagesLocations[i].Name, 
    Image.FromFile(imagesLocations[i].Tests 
            .FirstOrDefault(t => t.IsReference) 
            .ImagePath)); 

エラー:

Exception thrown: 'System.IO.FileNotFoundException' in System.Drawing.dll

Additional information: C:\Users\.."full path"..\Initial.png

いくつかの宣言:

ExcelWorksheet ws2 = package.Workbook.Worksheets.Add("Images"); 

// this is a list of locations, and "location" is a custom class       
var imagesLocations = SelectedSession.GetTests() 
    .Where(t => t.IsReference) 
    .Select(t => t.Location) 
    .OrderBy(t => t.DateCreated) 
    .ThenBy(t => t.Name) 
    .ToList(); 

Testは、記述されたクラスのカスタムオブジェクトです

IsReference

ImagePathだからエラーがExcelファイルにそれを置くために、パスから画像を撮影しようとしていることであるTest

のローカル文字列である特定の条件下でTestのローカルBooleanです。しかし、イメージは存在しません。そのコード行を理解する必要がありますので、私はそれが起こるのを防ぐことができます。どのように私はそれを行うことができますの任意の助けは非常に有用です。ありがとう。

+2

'imagesLocations [i]を.Tests.FirstOrDefault(トン=> t.IsReference)のための変数を作成します.ImagePath'へそれが評価されるものを参照してください。例外によると、これはあなたのファイルシステムに存在しない 'C:\ Users \ .."フルパス ".. \ Initial.png"を返します。また、コードを読みやすくします。 – HimBromBeere

+0

'.Where(t => t.IsReference)'は条件に合致するエントリをリストから選択するだけなので、 'FirstOrDefault(t => t.IsReference)'を呼び出すときにこのチェックを省略し、 'FirstOrDefault () 'の代わりに、リストから最初の項目を単に選択するか、そのような項目が存在しない場合は' null'を選択します。 – HimBromBeere

+0

@himBromあなたのコメントありがとうございました。あなたが言ったように私はそれを壊しました、そして実際にそれは読みやすく、維持するのがずっと簡単です。私はちょうどあまりにも多くの時間を掘って、私の心のセットをブロックしました。フィードバックを投稿する場合は、私はその回答を掲載します。感謝します。 –

答えて

0

@HimBromBeereが示唆したように、彼は正しかった。

これは私はそれが私に起動し、動作チェックのエラーを得たやったことです:

var temp = imagesLocations[i].Tests.FirstOrDefault(t => t.IsReference).ImagePath; 
if (File.Exists(temp)) 
{ 
    var temp2 = Image.FromFile(temp); 
    var image = ws2.Drawings.AddPicture(imagesLocations[i].Name, temp2); 
    image.SetSize(375, 375); 
    image.SetPosition(i, 0, 1, 0); 
} 
関連する問題