作为序言,我正在尝试使用一些将数据库表映射到 C# 的类,以用于一些内部开发工具。我试图做的是使用一个字符串来指定一个类类型,然后将该类的类型用作排序列表中的 TVal,最后使用 Activator 实例化该类并将其添加到列表中。
假设这是可能的,我认为我的主要问题是不知道如何在SortedList
和Activator
行中使用“classType”的正确语法。
以下内容不起作用,但希望它能清楚地说明我要完成的工作。
string className = "ClassName";
System.Type classType = Type.GetType(className);
SortedList<int,classType> rcdsList = new SortedList<int,classType>();
rcdsList.Add(key,(classType)Activator.CreateInstance(classType , paramArray));
编辑:自从我发布原始问题以来,这就是我最终想出的解决方案。基本上它是使用基类设置 SortedList,然后转换激活器结果。
string tableClassName = "Table_" + tableNames[i];
System.Type targetType = Type.GetType("DbUtilities." + tableClassName);
SortedList<int, DbUtilities.DbObjectTableBase> rcdsList = new SortedList<int, DbUtilities.DbObjectTableBase>();
while (!rcd.EOF)
{
object[] paramArray = new object[rcd.Fields.Count];
for (int j = 0; j < rcd.Fields.Count; j++)
{
paramArray[j] = rcd.Fields[j].Value;
}
DbUtilities.DbObjectTableBase obj = (DbUtilities.DbObjectTableBase)Activator.CreateInstance(Type.GetType(targetType.AssemblyQualifiedName), paramArray);
rcdsList.Add(Convert.ToInt32(rcd.Fields[0].Value), obj);
rcd.MoveNext();
}