2
我需要將具體類型的通用列表轉換爲具體類型實現的接口的通用列表。該接口列表是一個對象的屬性,我使用反射來分配值。我只知道運行時的價值。下面是什麼,我試圖完成一個簡單的代碼示例:.net使用反射時的運行時類型轉換
public void EmployeeTest()
{
IList<Employee> initialStaff = new List<Employee> { new Employee("John Smith"), new Employee("Jane Doe") };
Company testCompany = new Company("Acme Inc");
//testCompany.Staff = initialStaff;
PropertyInfo staffProperty = testCompany.GetType().GetProperty("Staff");
staffProperty.SetValue(testCompany, (staffProperty.PropertyType)initialStaff, null);
}
類是像這樣定義:
public class Company
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private IList<IEmployee> _staff;
public IList<IEmployee> Staff
{
get { return _staff; }
set { _staff = value; }
}
public Company(string name)
{
_name = name;
}
}
public class Employee : IEmployee
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Employee(string name)
{
_name = name;
}
}
public interface IEmployee
{
string Name { get; set; }
}
有什麼想法?
我正在使用.NET 4.0。新的協變或逆變特徵會有幫助嗎?
在此先感謝。
該列表將是新的,但員工將是舊的對象 – SWeko 2010-06-07 13:32:33
@SWeko:絕對。將編輯以使其更清晰。 – 2010-06-07 13:38:32
爲了讓事情更加複雜,Staff是一個IList,所以你不能只是實例化它,並添加新的元素,你也必須知道期望的實現...... – SWeko 2010-06-07 13:45:52