2014-05-19 96 views
0

我是新的C#,但熟悉vb.net通過C#的類型轉換混淆

我setVendor功能需要int和一個字符串

爲什麼這項工作

shopify.setVendor(System.Convert.ToInt32(reader["ProductID"]), System.Convert.ToString(reader["Vendor"])); 

但這兩個參數均失敗:

shopify.setVendor(int.Parse(reader["ProductID"]), reader["Vendor"].ToString); 

很混亂。它想要一個字符串,我給它一個字符串,但它不接受它。 。 。錯誤將字符串轉換爲int

+0

。在我發佈之前,我在這方面花了大量的時間。隨着ToInt32和int.Parse,我也嘗試了(int)reader [「ProductID」]。我想你不能請一些人。我一直在做VB 20年,但決定用C#編寫我的第一個應用程序。我正在閱讀「C#和VB.NET轉換」一書,但有時很難發現您的錯誤,特別是在使用新語言時。 –

+2

不是我是downvoter,而是*任何*當你說「這個失敗」時,你應該給出精確的失敗模式 - 包括異常或編譯時錯誤。 –

+0

@JonSkeet我很欣賞你寫下你的答案的時間和精力,但我想我應該刪除它,因爲它被低估了,並且有兩個電話要關閉它,對吧? –

回答

6

存在Convert.ToInt32的超載,它接受objectint.Parse沒有這樣的過載。參數在編譯時間處必須是string。你將需要:

shopify.setVendor(int.Parse(reader["ProductID"].ToString()), 
        reader["Vendor"].ToString()); 

(注意從ToString的變化ToString()的第二個參數......以前你指定被用於創建委託ToString法團;改變你調用ToString代替)

或者:

// This only works if the value *is* a string 
shopify.setVendor(int.Parse((string) reader["ProductID"]), 
        reader["Vendor"].ToString()); 

理想的,但是,你會回來的值在正確的形式了,所以你可以使用:

shopify.setVendor((int) reader["ProductID"], (string) reader["Vendor"]); 

或者:

// Set up productIdColumn and vendorColumn first 
shopify.setVendor(reader.GetInt32(productIdColumn), reader.GetString(vendorColumn)); 

還要注意的是setVendor不是傳統的.NET方法名稱。

+0

啊我看到了,基本上是因爲我在ToString arg上錯過了()! C#需要很多習慣! 乾杯! –

+0

@MaxHodges:不,那只是*一個*錯誤。 * other *錯誤是,你正在調用'int.Parse(reader [「ProductID」])'這是不會工作...... –

1

嗯,你的第一個問題

System.Convert.ToInt32(...)System.Convert.ToString(...)將所提供的參數intstring分別是正確的格式由代碼如預期。

其次,它應該是ToString()ToString,因爲你想一個呼叫的方法:

reader["Vendor"].ToString() 
1

在你的第二個代碼片段中的ToString部分需要括號(),因爲它是一種方法, ,而不是會員或財產。

1
int productId; 
if(int.TryParse(reader["ProductID"].ToString(), out productId)) 
    shopify.setVendor(productId, reader["Vendor"].ToString()); 

將是一個安全的方法來做到這一點。向誰投我的票都是