2016-04-12 22 views
0

Bu kod satırında bir hatam var ve hataya giremedim çünkü hata hemen ortaya çıkıyor. Herkes bana kodun tam olarak ne yapmaya çalıştığını söyler misiniz?Bu kod satırı ne anlama geliyor ve hatayı nasıl düzeltebilirim?

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

Hata:

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

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

Bazı beyanlar:

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 yazılı sınıfının özel nesnesidir

IsReference

ImagePath Yani hata o excel dosyasında koymak için bir yol bir görüntü almaya çalışıyor olmasıdır Test

için yerel dizedir belirli koşullar altında Test için yerel Boolean olduğunu. Ancak, görüntü mevcut değil. Bu kod satırını anlamalıyım, böylece olmasını engellemeliyim. Bunu nasıl yapabileceğimin herhangi bir yardımı çok yararlıdır. Lütfen

+2

imagesLocations [i] .Tests.FirstOrDefault (t => t.IsReference) .ImagePath' 'için bir değişken oluşturun:

Bu

Bu da beni hazırlamak ve yayınlamak kontrol hata var yaptığıdır Ne değerlendirdiğini gör. İstisna göre bu, dosya sisteminizde bulunmayan "C: \ Users \ .." tam yolunu ".. \ Initial.png" döndürür. Ayrıca kodu okumayı daha kolay hale getirir. – HimBromBeere

+0

'.Where (t => t.IsReference)' yalnızca listenizdeki durumu bu koşula uyan girişleri seçecektir, böylece 'FirstOrDefault (t => t.IsReference)' çağrılırken bu denetimi atlayabilir ve 'FirstOrDefault 'komutunu kullanabilirsiniz.() 'yerine, listenizden sadece ilk öğeyi seçecek veya böyle bir öğe yoksa" null "olacaktır. – HimBromBeere

+0

@himBromBeere yorumlarınız için teşekkür ederiz. Söylediğin gibi kırdım ve gerçekten okumak ve sürdürmek çok daha kolay. Sadece kazmaya çok zaman harcadım, bu yüzden aklımı engelledi. Herhangi bir geri bildirim gönderebilirseniz cevabı gönderirim. Bunu takdir ediyorum. –

cevap

0

'a teşekkürler. @HimBromBeere'in önerdiği gibi ve haklıydı.

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); 
}