我从本地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)
答案 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);
}