2009-12-08 13 views
10

.ascx denetimlerimin bir özelliğini, bu denetimi kullanarak bir .aspx'den ayarlamaya çalışıyorum. birinde YaniHata: 'void' türünü dolaylı olarak 'System.Collections.Generic.List' olarak dönüştüremiyorum.

benim içinde bu kontrolü vardır .aspx, ben aşağıdaki kod benim gömülü .ASCX ait ItemsList özelliğini ayarlamaya çalışırken adres: .ASCX içinde

Item item = GetItem(itemID); 
myUsercontrol.ItemList = new List<Item>().Add(item); 

özelliği böyle görünüyor ayarlamak çalışıyorum o:

public List<Item> ItemsList 
{ 
    get { return this.itemsList; } 
    set { this.itemsList = value; } 
} 

Hata: örtük 'System.Collections.Generic.List'

türünü 'boşluk' dönüştürülemez

Bu yüzden, mülkün bir parçası olarak boşluğun nereden geçtiğini anlamıyorum ... ... garip.

cevap

25

Bunu yapamazsınız, çünkü Ekle işlevi geçersizdir, listeye bir başvuru değil.

mycontrol.ItemList = new List<Item>(); 
mycontrol.ItemList.Add(item); 

veya collection initializer kullanın:: Bunu yapabilirsin hemen hükümsüz dönen bir yöntemdir ki, üzerine ekleme aradığınız List<Item> oluşturduktan sonra

mycontrol.ItemList = new List<Item> { item }; 
+0

Bir gönderme hatası yaşadım, güncellenmiş gönderiyi oku – PositiveGuy

+0

Yeni anahtar kelime ile listenin yeni bir örneğini oluşturdum, Neden önceden belirtmiş olduğum YENİ örneği yeniden oluşturmakla ilgili bir şey yapsın? Sadece liste dizisine içerik ekliyorum – PositiveGuy

+0

@cofffeeaddict: Listenin bir örneğini bekleyen bir özellik ayarlamaya çalışıyorsunuz. 'Add' yöntemi geçersizdir. – shahkalpesh

1
ItemListt.ItemList = new List<Item>().Add(item); 

Add yöntem liste bazlı sınıfının bir örneğini döndürür mu? DÜZENLEME

: Hayır, List<T>.Add

EDIT2 üzerinde belgeleri için bu link bkz: kod & bu parça yazmayı deneyin Add yöntemin dönüş değeri ne olduğunu görmek. o void döndürdüğü için

List<Item> items = new List<Item>(); 
var modifiedList = items.Add(myItem); 

Bunu göreceğiz, kod Add başarısız gerekir.

+0

Bir gönderme hata okumak güncellenmiş sonrası vardı. – PositiveGuy

+0

@coffeeaddict: Sayfayı birkaç kez yeniledik. Ancak kodda herhangi bir değişiklik göremiyorum. Sorun hala bir boşluk döndüren 'Add' yönteminin kullanımında yatıyor. Bunun yerine bir koleksiyon başlatıcısı kullanın. 'Yeni Liste () {item};' (Bu sözdiziminin doğru olduğunu umuyorum). – shahkalpesh

+0

teşekkürler. Evet, şimdi anlıyorum. – PositiveGuy

1

. Bu ItemList.ItemList türüne dönüştürülemiyor.

yerine yapmalısınız:

var list = new List<Item>(); 
list.Add(item); 
ItemList.ItemList = list; 
0

Elveda ItemList sizin usercontrol üzerinde örneği olarak, sadece UserControl.ItemList.Add(item)

+0

ItemList'in neden herhangi bir yerde, ancak daha önce oluşturduğum yerde başlatılması gerekir. Yeni anahtar kelimeyi burada kullandım, zaten bir örnek! – PositiveGuy

+0

doğru, ancak Liste .Add() yönteminde bir void dönüş türü vardır, bu nedenle bunu mycontrol.ItemList() atayamazsınız. Bunu başka bir satırda ayrı ayrı yorumlamanız veya bir koleksiyon başlatıcısı kullanmanız gerekir. Benim örneğim zaten örneklemi gerçekleştirdiyseniz geçerlidir. –

0

Add yöntemi listesinden bir başvuru dönmez yapabilirsiniz. İki adımda yapmak zorunda: Eğer özelliğinde koymadan önce

ItemListt.ItemList = new List<Item>(); 
ItemListt.ItemList.Add(item); 

Alternatif başvuruyu tutmak için yerel bir değişken kullanın:

List<Item> list = new List<Item>(); 
list.Add(item); 
ItemListt.ItemList = list; 
1
new List<Item>().Add(item); 

Bu çizgi boşluk döndürür.

Dene:

var list = new List<Item>(); 
list.Add(item); 
ItemListt.ItemList = list; 
+0

Şanslısınız. yanlışlıkla 1 tıkladım. – aMazing

İlgili konular