2011-05-12 31 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], ...