0

我想从一个方法返回多个数组,该方法使用一些 if 语句。我已经测试了代码的主体,它可以为自己工作。现在我想将它重新创建为我可以调用的方法,但是我得到了一些错误(并非所有代码路径都返回一个值)。我知道错误在于 if 语句没有发送任何返回,但我不确定如何修复错误并仍然获得我想要的功能。

这是该方法的代码:

private byte[] GetParameterBuff(string[] statement, ref byte[] tdi, ref byte[] tdo, ref byte[] mask, ref byte[] smask)
{
    string[] parameters;
    char[] delimiter = new char[] { '(', ')' };
    int numBits = Convert.ToInt32(statement[1]);

    if (numBits > 0)
    {
        Console.WriteLine("The amount of bits sent in the message is: " + numBits);
        for (int p = 2; p < statement.Length; p++)
        {
            parameters = statement[p].Split(delimiter, StringSplitOptions.RemoveEmptyEntries);

            if (parameters[0] == "TDI")
            {
                tdi = ConvertHexStringToByteArray(parameters[1]);
                foreach (byte b in tdi)
                {
                    Console.WriteLine("The tdi array is: " + b);
                }
                return tdi;

            }

            else if (parameters[0] == "TDO")
            {
                tdo = ConvertHexStringToByteArray(parameters[1]);
                foreach (byte b in tdo)
                {
                    Console.WriteLine("The tdo array is: " + b);
                }
                return tdo;
            }

            else if (parameters[0] == "MASK")
            {
                mask = ConvertHexStringToByteArray(parameters[1]);
                foreach (byte b in mask)
                {
                    Console.WriteLine("The mask array is: " + b);
                }
                return mask;
            }

            else if (parameters[0] == "SMASK")
            {
                smask = ConvertHexStringToByteArray(parameters[1]);
                foreach (byte b in smask)
                {
                    Console.WriteLine("The smask array is: " + b);
                }
                return smask;
            }

            else
            {
                return null;
            }


        }

        return ??;

    }
    else
    {
        Console.WriteLine("The amount of bits sent in the message is: " + numBits);
        return null;
    }


}
4

1 回答 1

0

如果你想对多个返回值使用“out”语法,你应该使用out byte[] tdi而不是ref byte[] tdi. 这表明调用者不必提供现有值。但是,这确实意味着您需要在从方法返回之前分配每个 out 参数。

要返回多个值,您可以使用 ValueTuple 语法,即

public (byte[] tdi, byte[] tdo, byte[] mask) GetParameterBuff(string[] statement)

当您需要返回许多参数时,这开始变得不可读。在这种情况下,引入一个小班可能是个好主意,即

public class MyArrays
{
    public byte[] Tdi { get; }
    public byte[] Tdo { get; }
    public byte[] Mask { get; }

    public MyArrays(byte[] tdi, byte[] tdo, byte[] mask)
    {
        Tdi = tdi;
        Tdo = tdo;
        Mask = mask;
    }
}

无论您使用哪种方法,如果某些条件不满足,您都需要决定返回什么。

  • 例外
  • 无效的
  • 一个可能/选项
  • bool 返回成功/失败,以及值的输出参数
于 2020-03-26T13:32:04.180 回答