1

体験用のメッセージング サービス アプリケーションを作成中です。しかし、以前に遭遇したエラーに出くわしました。これが私の方法です:

bool userExists(string pcName)
    {
        string[] files = Directory.GetFiles(usersFile);

        foreach (string fileName in files)
        {
            if (fileName == pcName)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

ご覧のとおり、このメソッドは、ユーザーの txt ファイルがフォルダーに存在するかどうかについて、yes または no の回答を返します。さて、私にとっては、すべてのコード パスが値を返します。「bool userExists」ですべてのコードパスが値を返すわけではないというエラーが表示されるため、明らかにコンパイラは同じことを考えていません。この問題を解決するにはどうすればよいですか? ありがとう!

4

6 に答える 6

2

たとえば、リスト ファイルが空の場合はどうなりますか?
コンパイラは、return ステートメントにヒットせずに関数の最後に到達します。

コードを記述する良い方法は次のとおりです。

bool userExists(string pcName)
{
    string[] files = Directory.GetFiles(usersFile);

    foreach (string fileName in files)
    {
        if (fileName == pcName)
        {
            return true;
        }
    }
    return false;
}

そして、Linq に慣れる時が来るかもしれません。

bool userExists(string pcName)
{
    return Directory.GetFiles(usersFile)
                    .Any(file => file == pcName);
}
于 2013-04-23T08:12:14.617 に答える
1

filesが空だったら?これを行うことができます:

string[] files = Directory.GetFiles(usersFile);

foreach (string fileName in files)
{
    if (fileName == pcName)
    {
        return true;
    }
}

return false;
于 2013-04-23T08:12:23.160 に答える
1

ファイルがない場合はどうなりfilesますか?

コードはステートメントをスキップforeachしますが、ステートメントの外にステートメントがないため、何も返されforeachませんreturn

string[] files = Directory.GetFiles(usersFile);

foreach (string fileName in files)
{
    if (fileName == pcName)
    {
        return true;
    }
}

return false or true;

Linqまたは、解決する他の方法があります。

return Directory.GetFiles(usersFile)
                .Where(fileName => fileName == pcName)
                .Any();
于 2013-04-23T08:15:21.580 に答える
0
bool userExists(string pcName)
{
    return Directory
        .GetFiles(usersFile)
        .Any(fileName => fileName == pcName);
}
于 2013-04-23T08:14:03.600 に答える
0

問題は、「ファイル」の配列が空になる可能性があることです。その場合、ブール値の return ステートメントがヒットすることはありません。最後の 'return false;' を入れます。for...each ループの後、これ以上エラーは発生しません。

そうは言っても、あなたの基本的な論理には欠陥があります。else ステートメントで false を返すことにより、ループが継続しなくなります (複数のファイルがあると仮定します)。

于 2013-04-23T08:14:51.010 に答える