无法在 C# 中将字符串从表写入字符串属性
本文关键字:字符串 属性 | 更新日期: 2023-09-27 17:56:10
>我从本地访问 mdb 文件中读取值。一个值作为字符串存储在数据库中,我把它放在一个表中。使用 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)
您在答案中指出转换时有效,这是必要的,因为它们不是字符串和整数。它们是对象。如果需要,您可以创建一个 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);
}
您必须显式强制转换对象:
要强制转换为字符串,请使用:
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]
返回类型 object
,并且您的方法需要 string
。 即使您知道它是一个字符串,它对编译器来说并不明显,并且必须使用强制转换显式指定,如上一个示例所示,尽管仅强制转换应该比不必要地转换更有效:
Project = new Project((string)dt.Rows[0][ProjName], ...