我在数据表中查找记录。如果记录匹配,那么我想比较数据行中的值并进行一些操作。请参阅下面的代码以获得更好的解释,
foreach (DataRow row2 in dtTo.Rows)
{
DataRow[] match = dtReturn.Select("Id = " + row2["Id"]);
if (match.Length > 0)
{
if (match[0]["boolInt"] == 1) // Getting error on this line
{
match[0]["NewValues"] = "";
}
}
}
我在下面的行中遇到错误
if (match[0]["boolInt"] == 1)
然后resharper建议我施放给布尔。所以我将上面的行更改为
if( (bool) (match[0]["bClosed"] = 1))
但是当我运行该项目时,我得到运行时错误,因为“指定的强制转换无效”在上面一行。 在即时窗口中,当我输入时,我得到的值为1,
(match[0]["bClosed"]
我该怎么做才能摆脱这个错误?
答案 0 :(得分:1)
您需要将值转换为int。你可以这样做:
if (Convert.ToInt32(match[0]["boolInt"]) == 1)
但是如果列包含无法生成的值,则会出现错误。
更好的方法是:
int number;
bool result = Int32.TryParse(match[0]["boolInt"], out number);
if (result && number == 1)
答案 1 :(得分:1)
试试这个:
if ((match[0]["boolInt"] as int?) == 1)
{
match[0]["NewValues"] = "";
}
如果value为null或无效,则不会导致异常,但仍应处理。
答案 2 :(得分:1)
据此:
不,不会有空。该字段是tinyint
您的代码应该如下所示(SQL Server中的AFAIR,tinyint
与CLR中的byte
匹配):
if ((byte)(match[0]["boolInt"]) == 1)
{
}
如果您知道字段类型,则无需调用Convert
方法。更快的方法是直接转换为已知类型。