这是最好的转换方法

本文关键字:转换方法 | 更新日期: 2023-09-27 18:02:47

Datatable dtproducto;(满)

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

语法dtproducto。Rows[i][Column]总是返回一个对象,哪一个是将它们转换为整数的最佳方法?

问候,豪尔赫。

这是最好的转换方法

您当前正在将它们转换为"短"或16位整数。我不认为你现在的做法有什么错。如果您需要一个32位整数,只需替换Convert.ToInt32()

如果您不确定数据源中可能包含什么,那么您可能希望通过检查null和/或解析结果将源记录数据直接转换为具体值时更加小心。比如:

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

当前转换它们的方式可能是最安全的方法,假设预期的数据类型是固定的。Convert类执行各种检查,以确保它可以正确转换,而不会出现意外异常……在它不能正确转换的情况下,您可以直接支持特定的文档异常。

应该注意的是,额外的验证会增加开销,因此,可能不是性能最好的方法。如果您确定这些数据表字段中的底层值始终是特定类型,那么直接强制转换可能是性能最好的方法……但是这样做的风险更大,而且可能会导致意想不到的异常。

这完全取决于您想如何处理它。Convert会抛出一个异常,你也可以使用short。TryParse不会抛出异常。

阅读这里的一些信息:http://blogs.msdn.com/b/ianhu/archive/2005/12/19/505702.aspx

I通常倾向于int。

这给了你什么?

string type1 = dtProduto.Rows[0]["cdProduto"].GetType().Name
string type2 = dtProduto.Rows[0]["cdReferencia"].GetType().Name

数据库可能返回正确的对象类型,在这种情况下,您只需要将对象强制转换为正确的类型。它会告诉你那个类型是什么,直接转换为它,然后继续。不需要转换。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)