0
votes

Quels mots-clés sont légaux dans Type.GetType ()?

Je suis confus avec la documentation

public class Framework
{
    public StreamReader Reader;
    public CsvReader Csv;
    public string Path { get; set; }
    public DataTable Table;

    public Framework()
    {
        //Path = "file.csv";
        //Reader = new StreamReader(Path);
        //Csv = new CsvReader(Reader, CultureInfo.InvariantCulture);
        string[] ColumnNames = { "Name", "Phone", "Address" };
        Table = CreateTable(ColumnNames);
    }

    //args are the name of the columns
    public DataTable CreateTable(string[] args)
    {
        DataTable tbl = new DataTable();
        DataColumn column = new DataColumn();
        DataRow row;

        /* create columns */

        column.DataType = Type.GetType("Int32");
        column.ColumnName = "ID";
        tbl.Columns.Add(column);

        for (int i = 0; i < args.Length; i++)
        {
            column.DataType = Type.GetType("String");
            column.ColumnName = args[i];
            tbl.Columns.Add(column);
        }

        row = tbl.NewRow();
        row["ID"] = 1;
        tbl.Rows.Add(row);

        return tbl;
    }
}

Le débogueur me dit que GetType () ne reconnaît pas la 'String'
J'ai lu que je pouvais faire ça ici .
Ce programme est un projet de framework .net et tout ce qu'il fait à la fin est d'afficher un datagridview avec une fonction de clic de bouton qui n'a que dataGridView1.DataSource = Framework.Table;
le programme ne montre même pas, ce que je fais mal? Je pense qu'il n'y a aucune information à ce sujet ...


2 commentaires

GetType peut être fragile, le paramètre de chaîne doit être le nom qualifié d'assembly du type, mais il prendra des formes plus courtes, bien qu'il y ait de nombreuses raisons pour lesquelles il échouera sur les variantes plus courtes


Donnez comme cette colonne.DataType = typeof (Int32);


3 Réponses :


3
votes

Vous devrez écrire le nom complet du type, c'est-à-dire

column.DataType = typeof(string);

Si vous voulez toujours obtenir le type de chaîne, vous pouvez également écrire

column.DataType = Type.GetType("System.String");

Utilisez votre méthode où vous utilisez une chaîne pour obtenir le nom du type uniquement si vous ne savez pas au moment de la compilation de quel type vous avez besoin.


3 commentaires

alors pourquoi devrait-il fonctionner avec Int32 s'il a besoin du système .


Ce n'est pas vraiment l'histoire complète, mais probablement assez bonne pour une réponse à cette question particulière


@ EgonStetmann. Pour être honnête, je ne sais pas pourquoi cela fonctionne avec Int32 . Mais je vous recommande fortement d'utiliser l'opérateur typeof . Il présente de nombreux avantages, par ex. vous vous rendrez compte plus facilement des fautes d'orthographe, ou si vous l'utilisez sur votre propre type, il est plus facile de renommer ce type.



0
votes

Donnez comme ceci column.DataType = typeof (Int32);


0 commentaires

1
votes

Vous pouvez utiliser Type t = typeof (string) ou Type.GetType ("System.String") ou typof (int) .Assembly. GetType ("System.String")


0 commentaires