并非所有代码路径都返回类中boolean方法的值

时间:2017-02-01 14:29:34

标签: c# winforms visual-studio

我是编程新手,我正在尝试使用Visual Studio中的Windows窗体应用程序创建密码管理程序。基本上可以添加,编辑和保存帐户。

我添加了一个Account类,其中我使用了addAccount方法。但它给了我一个错误,表示并非所有代码路径都返回一个值。为什么会这样?请跟我走慢我是新人。

namespace thePass
{
    class Account
    {
        int numAccount;
        string[] AccountName;
        string[] Email;
        string[] Username;
        string[] Password;

        //constructors      
        public Account(string in_AccountName, string in_Email, string in_Username, string in_Password)
        {
            numAccount = 0;
            AccountName = new string[] { in_AccountName };
            Email = new string[] { in_Email };
            Username = new string[] { in_Username };
            Password = new string[] { in_Password };
                //NOT DONE KEEP GOING HERE CHECK NOTES FOR HELP maybe i leave as default?
        }

        public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
        {
            bool isFound = false;
            bool isAdded = false;
            for (int i = 0; i < numAccount; i++)
            {
                if (AccountName[i].CompareTo(in_Account) == 0)
                {
                    isFound = true;
                    break;
                }
                if (isFound == false)
                {
                    AccountName[numAccount] = in_Account;
                    numAccount++;
                    isAdded = true;
                }
                Email[numAccount] = in_Email;
                Username[numAccount] = in_Username;
                Password[numAccount] = in_Password;
                return isAdded;

            }
        }

5 个答案:

答案 0 :(得分:3)

您在for结构中返回,根据条件,可能无法访问。你可以通过这样做来解决这个问题:

    public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
    {
        bool isFound = false;
        bool isAdded = false;
        for (int i = 0; i < numAccount; i++)
        {
            if (AccountName[i].CompareTo(in_Account) == 0)
            {
                isFound = true;
                break;
            }
            if (isFound == false)
            {
                AccountName[numAccount] = in_Account;
                numAccount++;
                isAdded = true;
            }
            Email[numAccount] = in_Email;
            Username[numAccount] = in_Username;
            Password[numAccount] = in_Password;


        }
        return isAdded;
    }

要实现的重要一点是(只是添加这个,因为你说你是编程的初学者)只是因为你确定这样的条件(给定你的逻辑)永远不会发生,编译器无法知道这一点。简单地说,编译器的任务是强制执行,无论数据中出现什么异常,无论执行路径是什么,您的方法都会返回bool值。

答案 1 :(得分:0)

addAccount需要返回bool,但问题是您的循环可能永远不会执行。你的循环条件是for (int i = 0; i < numAccount; i++);如果numAccount开始时会发生什么,例如-1

您需要做的是返回循环外的<{1}} 。只需移动这一行:

isAdded

到循环的右括号下方。

答案 2 :(得分:0)

方法

public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
    ...
    for (int i = 0; i < numAccount; i++)
    {
        ...
        return isAdded;
    }
}

你在循环内返回值,但是你没有在循环外返回值,有错误。

你把PK置于代码中的低位,然后循环返回。 我认为应该是:

public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
    ...
    for (int i = 0; i < numAccount; i++)
    {
        ...
    }

    return isAdded;
}

答案 3 :(得分:0)

尝试此代码。您的部分问题是您在for循环中返回值。除非您运行代码,否则编译器无法知道您编写正确逻辑的天气。此外,'return'类型表示相应块或方法的结尾,因此您无法为您的每个条件返回一个值。所以那只是假,因此编译时错误。

    public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
    {
        bool isFound = false;
        bool isAdded = false;
        for (int i = 0; i < numAccount; i++)
        {
            if (AccountName[i].CompareTo(in_Account) == 0)
            {
                isFound = true;
                break;
            }
            if (isFound == false)
            {
                AccountName[numAccount] = in_Account;
                numAccount++;
                isAdded = true;
            }
            Email[numAccount] = in_Email;
            Username[numAccount] = in_Username;
            Password[numAccount] = in_Password;                
        }
        return isAdded;
    }

答案 4 :(得分:0)

你在for循环中返回boolean,但是如果方法没有进入for循环,它将无法返回任何值。这就是你的情况:

在构造函数中,您已声明numaccount = 0

现在,在您的方法调用中,您没有为numaccount分配任何值,因此它为0, 所以,它永远不会进入循环。如

    public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
    {
        bool isFound = false;
        bool isAdded = false;
        for (int i = 0; i < numAccount; i++) // here i = numAccount = 0, hence this for loop will never execute
        { 

            /* rest codes*/

              return isAdded;

        }

        /*   No return statement added here, hence the error*/
    }