我收到错误CS0177(输出参数...必须在控制之前分配给...)。虽然查看了类似的条目但无法修复它

问题描述 投票:0回答:1

通过下面的代码,我从 PLC 控制器读取过程变量。该方法具有 var_result 和 var_result_float 等输出。我在最后一行收到错误 CS0177,因为这些输出参数未分配。在第二个 for 循环中,我已为所有条件分配了值。我找不到哪里出了问题。

错误 CS0177 在控制离开当前方法之前,必须将输出参数“var_result”分配给...

错误 CS0177 在控制离开当前方法之前,必须分配输出参数“var_result_float”...

public Int32 doReadMixEx2(Int32 connnr, Int32 timeout, string var_type, string var_format, UInt16 var_offset, UInt16 var_bit, UInt16 var_DB_no, out UInt32 var_result, out Single var_result_float)
    {
        Int32 result = AGL4.AGL40_PARAMETER_ERROR;
        AGL4.DATA_RW40[] rwfield = new AGL4.DATA_RW40[1];
        for (int j = 0; j <= 2; j++)
        {                
            rwfield[j] = new AGL4.DATA_RW40();
            rwfield[j].BitNr = var_bit;
            rwfield[j].DBNr = var_DB_no;
            rwfield[j].Offset = var_offset;
            rwfield[j].OpAnz = 1;
            rwfield[j].Result = 0;

            switch (var_type)
            {
                case "M":
                    rwfield[j].OpArea = AGL4.AREA_FLAG;
                    break;

                case "I":
                    rwfield[j].OpArea = AGL4.AREA_IN;
                    break;
                case "O":
                    rwfield[j].OpArea = AGL4.AREA_OUT;
                    break;
            }

            PLC__VAR_vartype = var_type;

            switch (var_format)
            {
                case "X":
                    rwfield[j].OpType = AGL4.TYP_BIT;
                    rwfield[j].B = new Byte[rwfield[0].OpAnz];
                    rwfield[j].B[0] = 0;
                    break;

                case "B":
                    rwfield[j].OpType = AGL4.TYP_BYTE;
                    rwfield[j].B = new Byte[rwfield[0].OpAnz];
                    rwfield[j].B[0] = 0;
                    break;
             }

        }

        result = AGL4.ReadMixEx(connnr, rwfield, rwfield.Length, timeout);
        Return_ReadMixEx = result;

        for (int j = 0; j <= 2; j++)
        {
            if (result != AGL4.AGL40_SUCCESS)
            {
                // Error happened.
                String errormsg = "";
                AGL4.GetErrorMsg(result, out Error_Message_ACCON);
                var_result = 0;
                var_result_float = 0;
            }
            else
            {
                switch (var_format)
                {
                    case "X":
                        var_result = rwfield[j].B[0];
                        var_result_float = 0;
                        break;
                    case "B":
                        var_result = rwfield[j].B[0];
                        var_result_float = 0;
                        break;                      
                }
            }
        }

        return result;  // Here I get the Error        


    }
c# for-loop return
1个回答
0
投票

您说的没错,您正在为变量赋值,但问题是在某些情况/分支中您不会为变量赋值。

例如: 如果

result == AGL4.AGL40_SUCCESS
,您将前往
else
。如果您的
var_format
变量不是 XB,您将不会匹配任何切换条件,并且
var_result
永远不会被分配。

查看您提供的代码。

var_result
var_result_float
将始终为 0。因此,我建议您在方法开始时分配它们。

public Int32 doReadMixEx2(Int32 connnr, Int32 timeout, string var_type, string var_format, UInt16 var_offset, UInt16 var_bit, UInt16 var_DB_no, out UInt32 var_result, out Single var_result_float)
{
    var_result = 0;
    var_result_float = 0;
    Int32 result = AGL4.AGL40_PARAMETER_ERROR;
    AGL4.DATA_RW40[] rwfield = new AGL4.DATA_RW40[1];
        
    //Rest of your code

    return result; 
}
© www.soinside.com 2019 - 2024. All rights reserved.