C# Can';t在C中将表中的字符串写入字符串属性#
我从本地访问mdb文件中读取值。一个值作为字符串存储在数据库中,我将它存储在一个表中。当使用C# Can';t在C中将表中的字符串写入字符串属性#,c#,types,C#,Types,我从本地访问mdb文件中读取值。一个值作为字符串存储在数据库中,我将它存储在一个表中。当使用GetType()方法时,它返回“System.String”,我可以在控制台上毫无问题地打印它,但是当我想将它用作另一个方法的属性(需要字符串)时,我会收到一个错误(“无法从'object'转换为'String'”,对于'int'也是如此”)。一些int值也会出现同样的问题 我做错什么了吗?或者在这种情况下有什么问题 Console.WriteLine(dt.Rows[0][ProjName]); //
GetType()
方法时,它返回“System.String”,我可以在控制台上毫无问题地打印它,但是当我想将它用作另一个方法的属性(需要字符串)时,我会收到一个错误(“无法从'object'转换为'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)
必须显式强制转换对象: 要转换为字符串,请使用:
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,并且无法检查强制转换是否成功。
dt.Rows[0][ProjName]
返回类型对象
,而您的方法需要字符串。尽管您知道它是一个字符串,但编译器并不清楚它,必须使用强制转换显式指定它,正如您在上一个示例中所示,尽管仅强制转换应该比不必要的转换更有效:
Project = new Project((string)dt.Rows[0][ProjName], ...
您在回答中指出,在转换时是有效的,这是必要的,因为它们不是字符串和整数。它们是物体。如果需要,可以创建一个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);
}
使用Console.WriteLine()
调用重载,接受类型为Object
的参数。此Overload函数在内部调用给定对象值上的ToString()
,以演示所看到的内容。projectName.ToString()
(带parens)-否则OP将出现另一个奇怪错误:)