是一个字段,但使用的类似于一个类型

时间:2013-11-26 10:19:25

标签: c#

DataTable dtcol = new DataTable();
string strdttype = cmbDttype.SelectedItem.ToString();
dtcol.TableName = txtDtname.Text;
dtxsd.Columns.Add(txtCname.Text, typeof(strdttype));
dtcol.WriteXmlSchema("@D:\Example\exampledt.xsd");

我正在编写上面的代码来填充数据表中的列,这里我从txtCname获取列名,我从Combobox cmbDttype中选择该列的数据类型。

 dtxsd.Columns.Add(txtCname.Text, typeof(strdttype)); //In this line I am getting error strdttype is a field but used is used like a type.

txtDtname带有该数据表的表名 从最后一行开始,它将Schema写入exampledt,但缺少xsd文件中的现有数据表,并显示新创建的数据表。

3 个答案:

答案 0 :(得分:5)

您应该向typeof operator提供类型名称(而不是变量名称)。您的strdttype包含字符串类型,因此正确的代码为:

dtxsd.Columns.Add(txtCname.Text, typeof(string));

另一种选择 - 获取变量类型:

dtxsd.Columns.Add(txtCname.Text, strdttype.GetType());

答案 1 :(得分:1)

这里使用typeof是错误的。您需要在此处提供ClassName而不是对象。要获得对象类型,请尝试第二行。

 typeof(ClassName);
 someVariable.GetType();

答案 2 :(得分:0)

我在您的代码中发现了两个不同的错误。一个是非常明显的,但其他是有条件的。

  1. 您在变量而不是类型上使用typeof运算符。类型 operator提供了底层数据类型的类型,所以正确 用法是

    var t = typeof(string);
    

    var tt = typeof(int);
    

    如果你想获得变量的类型,那么你应该使用GetType() 方法如下:

    dtxsd.Columns.Add(txtCname.Text, strdttype.GetType());
    
  2. 我认为您有一个用于选择数据类型的组合框,根据选择,您的列类型将被确定。如果是这样,那么即使您使用GetType方法,它也将始终返回字符串,因为您的变量strdttype是字符串类型。我认为在这种情况下你应该使用以下声明

        dtxsd.Columns.Add(txtCname.Text, Type.GetType(strdttype));
    

    组合框中的值应采用以下格式: “System.Int32”,“System.String”,“System.Int64”,. 。 。等等。

  3. 此致

    Nitin Joshi