Datatable dtProduto; (填充)
int cdProduto = Convert.ToInt16(dtProduto.Rows[0]["cdProduto"]);
int cdReferencia = Convert.ToInt16(dtProduto.Rows[0]["cdReferencia"]);
语法dtProduto.Rows [i] [Column]总是返回一个对象,哪一个是将'em转换为整数的最佳方法?
问候,豪尔赫。
答案 0 :(得分:3)
您目前正在将它们转换为“短” - 或16位整数。我认为你现在的做法没有任何问题。如果您需要32位整数,只需替换Convert.ToInt32()
。
如果您不确定数据源中可能包含哪些内容,您可能需要更加小心,通过检查空值和/或解析结果来直接将源记录数据转换为具体值。类似的东西:
int value;
if (dtProduto.Rows[0]["cdProduto"] != null)
{
if (!int.TryParse(dtProduto.Rows[0]["cdProduto"].ToString(), out value))
{
// Log exception, throw exception, do nothing, etc.
} // else row value is now an integer stored in the value variable
}
如果您想要16位整数,请将short
替换为int
。
答案 1 :(得分:1)
当前转换它们的方式可能是最安全的方法,假设预期的数据类型是固定的。 Convert类执行各种检查以确保它可以正常转换而不会出现意外异常...并且在无法正确转换的情况下,您将获得可以直接支持的特定文档异常。
应该注意的是,附加验证会增加开销,因此可能不是最高效的方法。如果您确定这些数据表字段中的基础值始终是特定类型,则直接转换可能是性能最高的方法......但它可能风险更高,并可能导致意外异常。
答案 2 :(得分:0)
这完全取决于你想要如何处理它。转换将抛出异常,您也可以使用short.TryParse,它不会抛出异常。
在此处阅读一些信息:http://blogs.msdn.com/b/ianhu/archive/2005/12/19/505702.aspx
出于性能原因,我倾向于倾向于int.TryParse。
答案 3 :(得分:0)
这给你带来了什么?
string type1 = dtProduto.Rows[0]["cdProduto"].GetType().Name
string type2 = dtProduto.Rows[0]["cdReferencia"].GetType().Name
数据库可能正在返回正确的对象类型,在这种情况下,您只需要将对象强制转换为正确的类型。这将告诉你该类型是什么,只是投射到它,然后去。不需要Convert.ToAnything,这可能比你需要做更多的工作。
你可能会得到这样的东西:
int cdProduto = (int)dtProduto.Rows[0]["cdProduto"];
int cdReferencia = (int)dtProduto.Rows[0]["cdReferencia"];
或者如果你想在C#中略微不同于数据库给你的东西,就像这样:
int cdProduto = (int)(ushort)dtProduto.Rows[0]["cdProduto"];
int cdReferencia = (int)(ushort)dtProduto.Rows[0]["cdReferencia"];
(在上面的代码块中,(ushort)
是ushort对象的强制转换,(int)
是ushort到int的转换。)