C# Can';t在C中将表中的字符串写入字符串属性#

C# Can';t在C中将表中的字符串写入字符串属性#,c#,types,C#,Types,我从本地访问mdb文件中读取值。一个值作为字符串存储在数据库中,我将它存储在一个表中。当使用GetType()方法时,它返回“System.String”,我可以在控制台上毫无问题地打印它,但是当我想将它用作另一个方法的属性(需要字符串)时,我会收到一个错误(“无法从'object'转换为'String'”,对于'int'也是如此”)。一些int值也会出现同样的问题 我做错什么了吗?或者在这种情况下有什么问题 Console.WriteLine(dt.Rows[0][ProjName]); //

我从本地访问mdb文件中读取值。一个值作为字符串存储在数据库中,我将它存储在一个表中。当使用
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将出现另一个奇怪错误:)