我是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 时出错
答案 0 :(得分:6)
Convert.ToInt32
超载,接受object
。 int.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方法名称。
答案 1 :(得分:1)
嗯,对于你的第一个问题
System.Convert.ToInt32(...)
和System.Convert.ToString(...)
分别将提供的参数转换为int
和string
,其格式与您的代码一致。
其次,它应该是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());
这是一种安全的方法。