无法将类型'object'隐式转换为'bool'类型

时间:2018-03-11 20:12:08

标签: c# vb.net

我正在将一些遗留代码从VB转换为C#,我收到错误:

  

无法将类型'object'隐式转换为'bool'类型。存在显式转换(您是否错过了演员?)

在if语句中的p2.Value = 1

这是VB中的代码

Public Function CheckforRatingRemoval() As Boolean
    Dim param(2) As SqlParameter
    Dim p1 As New SqlParameter("@interviewID", SqlDbType.Int)
    p1.Value = _interviewID
    param(0) = p1
    Dim p2 As New SqlParameter("@flag", SqlDbType.Int)
    p2.Direction = ParameterDirection.Output
    param(1) = p2
    EDJOINControls.EdjoinDatabase.ExecuteNonQuery("usp_checkInterviewRatingRemoval", param)
    If p2.Value = 1 Then
        Return True
    Else
        Return False
    End If
End Function

这里它被转换为C#

public bool CheckforRatingRemoval()
{
    SqlParameter[] param = new SqlParameter[2];
    SqlParameter p1 = new SqlParameter("@interviewID", SqlDbType.Int);
    p1.Value = _interviewID;
    param[0] = p1;
    SqlParameter p2 = new SqlParameter("@flag", SqlDbType.Int);
    p2.Direction = ParameterDirection.Output;
    param[1] = p2;
    EdjoinDatabase.ExecuteNonQuery("usp_checkInterviewRatingRemoval", param);
    if (p2.Value = 1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

5 个答案:

答案 0 :(得分:5)

传统VB代码可能Option Strict Off使其自动转换不匹配类型。对于缩小C#中的转换,这不会发生。 SqlParameter.Value的类型为object。明确地将其投放到int

return (int)p2.Value == 1;

第二个问题是使用=。在C#=中是赋值运算符(您不想在此使用)和==等于运算符。

请不要写

if ((int)p2.Value == 1) {
    return true;
} else {
    return false;
}

比较(int)p2.Value == 1的结果是truefalse,您可以直接返回此值!你不写if (x == 1) return 1; else if (x == 2) return 2; else if (x == 3) return 3; else ....,你写return x;

顺便说一下:有几个online VB to C# converters可以为你节省很多时间。

答案 1 :(得分:2)

在Visual Basic代码中,编译器隐式转换为所需类型,因此没有编译错误。另一方面,由于您正在执行Object类型的相等比较(p2.Value返回类型Object)而int因此C#需要您明确地施展它。 所以,你的代码应该是:

return (int)p2.Value == 1;

另外,请注意使用double equal运算符进行相等比较。

答案 2 :(得分:1)

这是摆脱错误的原因

if (Convert.ToInt32(p2.Value) == 1)
            {
                return true;
            }
            else
            {
                return false;
            }

答案 3 :(得分:0)

在C#中,if语句基本上简化为if (true)if (false)。运算符==返回true或false。运算符=设置一个值。如果您尝试说if (1 + 1 = 2),该程序将不知道该怎么做,因为它不会简化为真或假,因此会抛出错误。

tl; dr在if语句中使用==而不是=

答案 4 :(得分:-1)

应该是

if (p2.Value == 1)
        {
            return true;
        }
else
        {
            return false;
        }

with double ==