değişkenlerin genel listeye Casting ben tip List<*DynamicType*>
dinamik değişkenin Capacity
özelliğini değiştirmek gerekir. sorun olduğunu değişken türü doğru List<*DynamicType*>
yerine belirtilmiş ve yapabileceğim en iyi IList
için döküm olup değilse Activator
döner object
-casted değişken:dinamik tip
DynamicTypeBuilder builder = new DynamicTypeBuilder() { ... };
Type dataType = builder.GenerateType(...);
Type listDataType = typeof(List<>).MakeGenericType(dataType);
IList list = (IList)Activator.CreateInstance(listDataType);
Ben sadece bir hack buldum Bazı arama yaptıktan sonra:
dynamic dynamicList = list;
dynamicList.Capacity = dataRowsCount;
bunu yapmanın başka yolu varsa bu acaba benim durumumda kabul edilebilir olsa da.
var capacityProperty = listDataType.GetProperty("Capacity");
capacityProperty.SetValue(list, dataRowsCount, null);
alternatif statik olarak yazılan bir şekilde istediğiniz her şeyi yapan bir jenerik yöntem yazmaktır ve bunun yerine yansıma ile o çağırır:
Bu kurucu hakkında unuttum. Sadece bu özelliği ayarlamam gerektiğinden, bu şekilde yapmak gerçekten daha basit. Ayrıca, IList nesnesini çok iyi kullanabilmeniz için genel yöntem kullanma önerilerinizi de beğeniyorum. –
BTW, yanlış bir şey yapıyorum, ancak benim durumumda 'Activator.CreateInstance()' '' jeneric' değişkeninin sonucunu atamak işe yaramaz, çünkü 'list.Add (* Dinamik olarak oluşturulmuş dataType nesnesi *)' istisna ile sonuçlanır ve ön liste ile "listist" için "IList" çalışır. –
@Dmitry emin olun, daha sonra 'IList' için yayınlayın. Örnekte bunu yapmadım, basitçe örnekte * işlemlerin gerçekleştirilmesi için minimumun gösterildiği ve örnekte "Ekle (...)" harfi bulunmuyordu –