困惑的C#类型转换

Max*_*ges 0 c# type-conversion

我是C#的新手,但熟悉vb.net

我的setVendor函数需要一个int和一个字符串

为什么这样做

shopify.setVendor(System.Convert.ToInt32(reader["ProductID"]), System.Convert.ToString(reader["Vendor"]));
Run Code Online (Sandbox Code Playgroud)

但这两个参数都失败了:

shopify.setVendor(int.Parse(reader["ProductID"]), reader["Vendor"].ToString);
Run Code Online (Sandbox Code Playgroud)

非常困惑.它想要一个字符串,我给它一个字符串,但它不接受它...将字符串转换为int时出错

Jon*_*eet 6

有一个超载Convert.ToInt32接受object.没有这样的超载int.Parse.参数必须是string 编译时的.你需要:

shopify.setVendor(int.Parse(reader["ProductID"].ToString()),
                  reader["Vendor"].ToString());
Run Code Online (Sandbox Code Playgroud)

(注意:从改变ToStringToString()的第二个参数......以前你指定ToString被用来创建代表法团;改变你打电话 ToString吧.)

要么:

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

但是,理想情况下,您已经以正确的形式返回值,因此您可以使用:

shopify.setVendor((int) reader["ProductID"], (string) reader["Vendor"]);
Run Code Online (Sandbox Code Playgroud)

要么:

// Set up productIdColumn and vendorColumn first
shopify.setVendor(reader.GetInt32(productIdColumn), reader.GetString(vendorColumn));
Run Code Online (Sandbox Code Playgroud)

另请注意,这setVendor不是传统的.NET方法名称.