2016-04-03 14 views
0

Bir işlevi çağıran bir kodum var. Bu işlev jenerik kullanır ve bir bağlayıcı listesine yeni bir öğe eklemelidir.Generics ve Binding List ile yeni öğe ve özellikler ekleyin

Basitlik için, ne yapmaya çalıştığımı göstermek için kodu elimden aldım.

Çağrı bir işlev (sınıf BookToc tipi) bookToc adında bir BindingList öğe eklemek için:

private CallingFunction() 
{ 
    AddFunction(bookToc, typeof(BookToc).GetProperty(nameof(BookToc.BookTocItem))) 
} 

fonksiyon Generics'i kullanır ve BindingList yeni bir öğe eklemek gerekir. İşte (ama çalışmıyor) Ben kodu yapmak istediğim şey:

public AddFunction<T>(BindingList<T> bindingList, PropertyInfo propertyName) 
{ 
    string theItem = "Hello"; 
    string theTitle = "World"; 

    //this does not work because the generic list does not know the properties available: 
    bindingList.Add(new BindingList 
    { 
     BookTocItem = theItem, 
     BookTocTitle = theTitle 
    }); 
} 

Ben generics kullandığım için ben yeni bir öğe eklemek ve spesifik özelliklerini ayarlamak için görünmüyor olabilir. Durumun sebebinin genel olduğundan ve mevcut özelliklerin bilinmemesinden dolayı eminim.

Bağlama listesine yeni bir satır eklemem ve jenerik kullanarak belirli özellikler belirlemem gerekiyor. Mümkün mü? Eğer öyleyse, bir kod örneği için çok memnun olurum.

+0

Ancak, yeni öğenin BindingList'e eklenen özelliklerini ayarlamak istediğiniz değerler nelerdir? AddFunction öğenizin BindingList'e yeni bir öğe ekleyebilmesini beklerseniz, yeni öğede ayarlamak istediğiniz her özellik için de değerleri geçmeniz gerekir. – Steve

+0

eforuna değmez gibi görünmüyor. Çözümün tüm kodunu buraya yerleştirmedim çünkü bu basit örnekten çok daha karmaşık. AddFunction durumunda, BindingLIst adlı bookToc adında yeni bir satır ekleyebilmeyi ve BookTocItem ve BookTocTitle özelliklerinde değerleri yerleştirebilmeyi istiyorum. AddFunction değerleri tanımladığından, değerleri AddFunction'a iletemiyorum. – Bill

+0

"propertyName" ile tam olarak ne yapmayı düşünüyorsunuz? Arayan neden bu özelliği kendisi ayarlayamıyor? 'AddFunction' çok fazla çalışıyor gibi görünüyor - hem fabrika yöntemi hem de belirli bir koleksiyona ürün ekliyor. Neden arayanın eklemeyi yapmasına izin vermeyin ('bookToc.Add (CreateFunction (...));')? * Belirli * özelliklerle çalışmanız gerektiğinden, * jenerik * öğesinin kullanılmasının yararlı olduğuna emin misiniz? –

cevap

1

İşlev tanımlayıcısına, derleyiciye T özelliklerinin ne olduğunu açıklayan bir tür kısıtlaması ekleyin. Aşağıdaki bölümlere dikkat edin.

public Interface IBindingListItem { 
    string BookTocItem {get; set;} 
    string BookTocTitle {get; set} 
} 

public AddFunction<T>(BindingList<T> bindingList, PropertyInfo propertyName) where T: IBindingListItem, new() 
{ 
    string theItem = "Hello"; 
    string theTitle = "World"; 

    //this does not work because the generic list does not know the properties available: 
    bindingList.Add(new T 
    { 
     BookTocItem = theItem, 
     BookTocTitle = theLinkGuid 
    }); 
    } 
+0

Ayrıca 'T' üzerinde bir 'new (') kısıtlaması ekliyorum ve yeni BindingListItem'i yeni T ile değiştirin. –

+0

BindlingListItem burada sadece bir örnektir. Howerver yeni T(), çalışma zamanı T'nin varsayılan kurucu –

+0

olduğu konusunda hiçbir garanti olmadığı için işe yaramaz. Bu, yeni() 'kısıtlamanın ne anlama geldiğidir. –

İlgili konular