Tôi hiện đang sử dụng Generics để tạo một số phương thức động, như tạo đối tượng và điền các thuộc tính với các giá trị.Tạo biến chung từ một loại - Cách thực hiện? Hoặc sử dụng Activator.CreateInstance() với thuộc tính {} thay vì tham số()?
Có cách nào để "động" tạo Generic mà không biết loại không? Ví dụ:
List<String> = new List<String>()
là một cách predefinied, nhưng
List<(object.GetType())> = new List<(object.GetType()>()
không đang làm việc ... Nhưng có thể nó?
Đây không phải đang làm việc (Có một cách tiếp cận tương tự mà làm việc?)
public T CreateObject<T>(Hashtable values)
{
// If it has parameterless constructor (I check this beforehand)
T obj = (T)Activator.CreateInstance(typeof(T));
foreach (System.Reflection.PropertyInfo p in typeof(T).GetProperties())
{
// Specifically this doesn't work
var propertyValue = (p.PropertyType)values[p.Name];
// Should work if T2 is generic
// var propertyValue = (T2)values[p.Name];
obj.GetType().GetProperty(p.Name).SetValue(obj, propertyValue, null);
}
}
Vì vậy, trong ngắn hạn: làm thế nào để có một "Type" và tạo ra một đối tượng từ đó mà không sử dụng Generics? Tôi đã chỉ sử dụng Generics trong các phương pháp cho đến nay, nhưng nó có thể sử dụng cùng một cách trên các biến? Tôi phải xác định một Generic (T) trước khi phương pháp, vì vậy tôi có thể làm tương tự trên các biến trước khi "tạo" chúng?
... hoặc cách sử dụng "Activator" để tạo đối tượng có Thuộc tính thay vì Tham số. Cũng giống như bạn làm ở đây:
// Với các thông số đánh giá cao
Test t = new Test("Argument1", Argument2);
// Với tính
Test t = new Test { Argument1 = "Hello", Argument2 = 123 };
Tôi không muốn sử dụng "Danh sách" trong trường hợp này, nó phải là bất kỳ đối tượng nào. "Loại openListType = typeof (loại không xác định);" – Deukalion
Tôi không thấy câu trả lời này giải quyết OP như thế nào "sử dụng Activator.CreateInstance() với thuộc tính {} thay vì tham số()?" – Avishek