2011-05-12 56 views
1

我从本地Access mdb文件读取值。一个值作为字符串存储在数据库中,并将其存储在一个表中。当使用GetType()方法时,它返回“System.String”,我可以在控制台上打印而不会出现问题,但是当我想将它用作另一个方法的属性(需要一个字符串)时,我得到一个错误(“无法从'object'改为'string'“,而'int'则相同)。一些int值会出现同样的问题。不能在C#中从表格到字符串属性编写字符串

我做错了什么或在这种情况下是什么问题?

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 

的构造函数项目类别:

​​
+0

“Console.WriteLine()”的使用调用接受类型为“Object”的参数的重载。这个叠加函数在内部调用给定对象值的'ToString()',展示你所看到的。 – 2011-05-12 16:33:18

回答

1

你在回答时已经陈述了转换时的作品,而且它是必要的,因为它们不是字符串和整数。他们是对象。如果需要,您可以创建一个方法来处理它。

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); 
} 
+0

'projectName.ToString()'(与parens) - 或OP会得到另一个奇怪的错误:) – mellamokb 2011-05-12 16:36:49

+0

更新,很好的捕获。谢谢 – 2011-05-12 16:40:18

1

你必须明确地投对象:

要转换为字符串使用:

Object.ToString(); 

要转换为整数使用:

Int32.TryParse(String, out int); 

你constuctor成为

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.TryParse Int32.Parse假定所提供的说法是在任何时候都有效的int,不给你一个方法来检查铸件具有成功了。

+0

你可以请发布错误? – Pepe 2011-05-12 16:51:45

1

dt.Rows[0][ProjName]返回类型object,您的方法预计string。尽管你知道它是一个字符串,但编译器并不明显,并且必须使用cast明确指定,就像你在最后一个例子中所展示的那样,尽管只是投射应该比不必要地转换更高效:

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