如果標題的措辭不正確,請原諒我。如何在工廠返回T時訪問值列表<T>以及未知
我從各種設備的數據庫表中檢索數據並構建一個列表。不同的設備可能具有相同的屬性,並且肯定會有一些不同的屬性,所以我使用工廠模式在運行時創建需要的任何一個。
工廠類:
public interface IImportModel
{
IList CreateImportList(SqlDataReader reader);
}
和混凝土類:
public class Device1ImportModel : IImportModel
{
public string SerialNumber { get; set; }
public string PartA { get; set; }
public IList CreateImportList(SqlDataReader reader)
{
Device1ImportModel linkedItem = new Device1ImportModel();
List<Device1ImportModel> importList = new List<Device1ImportModel>();
while (reader.Read())
{
linkedItem = new Device1ImportModel();
linkedItem.SerialNumber = reader["SerialNo"].ToString();
linkedItem.PartA = reader["PartA"].ToString();
importList.Add(linkedItem);
}
return importList;
}
}
我從工廠創建設備:
importModel = ImportModelFactory.CreateImportModel("Device1");
現在,當我想遍歷importModel,我在嘗試訪問item.SerialNumber的行上收到編譯時錯誤。
foreach (var item in importList)
{
string number = item.SerialNumber;
}
錯誤:
'object' does not contain a definition for 'SerialNumber' and no extension method 'SerialNumber' accepting a first argument of type 'object' could be found.
如果我把一個斷點和項目變量懸停,我能看到的屬性和價值。
我嘗試使用動態而不是var,但後來在我的代碼中,我不能再使用Linq或Lambda查詢。
- 如何訪問這些值?
- 我可以使用反射將IList轉換爲List嗎?
編輯1
添加的代碼爲CreateImportModel:
static public IImportModel CreateImportModel(DeviceType device)
{
switch (device)
{
case DeviceType.Device1:
return new Device1ImportModel();
case DeviceType.Device2:
return new DeviceImportModel();
default:
return null;
}
}
請包含'CreateImportModel'的源代碼。 – mjwills
所有設備類型是否都有'SerialNumber'? – mjwills