无法在C#中将表中的字符串写入字符串属性

时间:2011-05-12 16:20:56

标签: c# types

我从本地Access mdb文件中读取值。一个值作为字符串存储在db中,我将它放在一个表中。使用GetType()方法时,它返回“System.String”,我可以在控制台上打印它没有问题,但是当我想将它用作另一种方法的属性(需要一个字符串)时,我收到一个错误( “无法从'对象'转换为'字符串'”,对于'int'也是如此。某些int值会出现同样的问题。

我做错了什么或在那种情况下有什么问题?

Console.WriteLine(dt.Rows[0][ProjName]); //prints project_name
Console.WriteLine(dt.Rows[0][ProjName].GetType()); //print "System.String"

Project = new Project(dt.Rows[0][ProjName], dt.Rows[0][MinDay], dt.Rows[0][MinWeek], dt.Rows[0][DayWeek]); //Error
Project = new Project(Convert.ToString(dt.Rows[0][ProjName]), Convert.ToInt32(dt.Rows[0][MinDay]), Convert.ToInt32(dt.Rows[0][MinWeek]), Convert.ToInt32(dt.Rows[0][DayWeek])); //Works Fine

项目类的构造函数:

public Project(string projectName, int hoursPerDay, int hoursPerWeek, int daysPerWeek)

3 个答案:

答案 0 :(得分:1)

您必须显式转换对象:

要转换为字符串使用:

Object.ToString();

要转换为整数使用:

Int32.TryParse(String, out int);

你的构造成为

Project = new Project(dt.Rows[0][ProjName].ToString(), Int32.Parse(dt.Rows[0][MinDay]), Int32.Parse(dt.Rows[0][MinWeek]), Int32.Parse(dt.Rows[0][DayWeek]));

注意:使用Int32.Parse而不是Int32.TryParse假定所提供的参数始终是有效的int,并且不会让您检查转换是否成功。

答案 1 :(得分:1)

dt.Rows[0][ProjName]会返回object类型,您的方法需要string。即使你知道它是一个字符串,但它对编译器来说并不明显,并且必须使用强制转换显式指定,正如你在上一个例子中所示,尽管只是转换应该比不必要的转换更有效:

Project = new Project((string)dt.Rows[0][ProjName], ...

答案 2 :(得分:1)

你在答案中说明了转换时的作品,因为它们不是字符串和整数所必需的。它们是物体。如果需要,可以创建一个methid来处理它。

public Project CreateProject(object projectName, object hoursPerDay, object hoursPerWeek, object daysPerWeek)
{
    return new Project(projectName.ToString(), Convert.ToInt32(hoursPerDay), Convert.ToInt32(hoursPerWeek), Convert.ToInt32(daysPerWeek);
}