转换这些是最好的方法?

时间:2011-07-18 22:20:00

标签: c#

Datatable dtProduto; (填充)

int cdProduto = Convert.ToInt16(dtProduto.Rows[0]["cdProduto"]);
int cdReferencia = Convert.ToInt16(dtProduto.Rows[0]["cdReferencia"]);

语法dtProduto.Rows [i] [Column]总是返回一个对象,哪一个是将'em转换为整数的最佳方法?

问候,豪尔赫。

4 个答案:

答案 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的转换。)