困惑的C#类型转换

时间:2014-05-19 14:00:57

标签: c# type-conversion

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

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

为什么这样做

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

但是这两个参数都失败了:

shopify.setVendor(int.Parse(reader["ProductID"]), reader["Vendor"].ToString);
很困惑。它想要一个字符串,我给它一个字符串,但它不接受它。 。 。将字符串转换为int

时出错

4 个答案:

答案 0 :(得分:6)

Convert.ToInt32超载,接受objectint.Parse没有这样的重载。参数在编译时必须是string 。你需要:

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

(请注意第二个参数从ToStringToString()的更改...之前您指定的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方法名称。

答案 1 :(得分:1)

嗯,对于你的第一个问题

System.Convert.ToInt32(...)System.Convert.ToString(...)分别将提供的参数转换为intstring,其格式与您的代码一致。

其次,它应该是ToString()而不是ToString,因为你想对该方法进行调用

reader["Vendor"].ToString()

答案 2 :(得分:1)

第二个代码段中的ToString部分需要括号(),因为它是一个方法,而不是成员或属性。

答案 3 :(得分:1)

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

这是一种安全的方法。