将字符串值转换为用户定义的类型

时间:2013-05-28 10:24:41

标签: c# dataset strongly-typed-dataset

您好我想将字符串值转换为DataType,以便我可以使用它。首先,我想描述一下我的问题。

1:我的Typed DataSet命名为文件
   2:此DataSet包含 6 DataTables
   3:DataTables名称为( File01 File02 File03 File04 File05 File06
   4:现在我想动态检查哪个DataTable要调用,并使用反射创建该类的实例。

string dataTableName = filename + "DataTable"; //This will generate File01DataTable,File02DataTable...,File06DataTable
Type dataTableType = typeof ( Files.File01DataTable ).Assembly.GetType( dataTableName );

5:现在创建该DataTable的实例。这里tDS是TypedDataSet文件实例

dataTableType dt = ( dataTableType )tDS.Tables[filename];

6:但上面的approch不起作用。当我尝试返回类型时,它返回null而不是该类。请有人指导我。
提前致谢

修改 非常感谢ronnie因为你解决了我50%的问题。现在当我在这里获得类型是实例化对象的另一种情况。

string dataTableName = filename + "DataTable";// It Generate File01DataTable and so on till File06DataTable.

现在,当我想在运行时实例化对象时,我无法告诉它

File01DataTable dt = (File01DataTable) tDS.Table[filename];

相反,我需要通用对象,它应该在运行时决定哪个对象实例化,例如File02DataTable或File05DataTable。那么我怎样才能克服这个问题?

1 个答案:

答案 0 :(得分:1)

您的班级是否已嵌套?如果是这样,您将需要在类之间添加“+”字符。此外,还需要一个完全引用的命名空间来返回类型。

namespace SO
{
    class Program
    {
        static void Main(string[] args)
        {
            string dataTableName = "SO.Files+File01DataTable";
            Type dataTableType = typeof(Files.File01DataTable).Assembly.GetType(dataTableName);
            Files.File01DataTable dt = (Files.File01DataTable)Activator.CreateInstance(dataTableType);
        }
    }
}