-1

我在另一个类中声明了一个方法,它有一个错误“并非所有代码路径都返回一个值”

我希望它向主程序返回一个真值或假值。

但是当我声明我的方法时,public static void会产生另一个错误,return 关键字后面不能跟对象表达式。

public class FileSearch
{
    public static Boolean SearchFiles(string path1, string path2)
    {
        bool isIdentical = false;
        string content1 = null;
        string content2 = null;

        DirectoryInfo d1 = new DirectoryInfo(path1);
        DirectoryInfo d2 = new DirectoryInfo(path2);

        foreach (FileInfo f1 in d1.GetFiles("*.txt", SearchOption.AllDirectories))
        {
            foreach (FileInfo f2 in d2.GetFiles("*.txt", SearchOption.AllDirectories))
            {
                content1 = (File.ReadAllText(f1.DirectoryName + "\\" + f1));
                content2 = (File.ReadAllText(f2.DirectoryName + "\\" + f2));

                isIdentical = content1.Equals(content2, StringComparison.Ordinal);

                if (isIdentical == false)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }
    }
}
4

6 回答 6

13

如果is ,您的方法SearchFiles仅返回一个值。如果是,则该方法永远不会返回。isIdenticalfalsetrue

要删除此错误,请编写如下内容:

public static Boolean SearchFiles(string path1, string path2)
{
    // do some work to assign a value to isIdentical
    // note that it would be idiomatic to just write "return isIdentical;" in this case
    // I keep it explicitly here for demonstration purposes 
    if (isIdentical == false)
    {
        return false;
    }
    else
    {
        return true;
    }
}

对于你的第二个问题:如果你声明你的方法,public static void你不能return有任何价值。void意味着该方法不会给你任何回报。

您可能想看看这个:方法(C# 编程指南),尤其是关于返回值的部分。

编辑:因为你有你if / elseforeach循环,你需要这样的东西:

public static Boolean SearchFiles(string path1, string path2)
{
    foreach(var item in collection)
    {
        // do some work to assign a value to isIdentical
        if (isIdentical == false)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    // in case the collection is empty, you need to return something
    return false;
}
于 2013-11-11T09:57:17.967 回答
9

如果 if 条件不成立,你需要返回一些东西

你可以试试这个

return isIdentical 

并删除您的 if 语句

所以它看起来像这样

public class FileSearch
{
        public static Boolean SearchFiles(string path1, string path2)
        {
            //Do your other work here
            return isIdentical ;
        }
}
于 2013-11-11T09:58:20.430 回答
2

你可以试试这个代码....我认为它会帮助你。

public class FileSearch
    {
        public static Boolean SearchFiles(string path1, string path2)
        {
            bool isIdentical = false;
            string content1 = null;
            string content2 = null;
bool result=false;

            DirectoryInfo d1 = new DirectoryInfo(path1);
            DirectoryInfo d2 = new DirectoryInfo(path2);

            foreach (FileInfo f1 in d1.GetFiles("*.txt", SearchOption.AllDirectories))
            {
                foreach (FileInfo f2 in d2.GetFiles("*.txt", SearchOption.AllDirectories))
                {
                    content1 = (File.ReadAllText(f1.DirectoryName + "\\" + f1));
                    content2 = (File.ReadAllText(f2.DirectoryName + "\\" + f2));

                    isIdentical = content1.Equals(content2, StringComparison.Ordinal);

                    if (isIdentical == false)
                    {
                       break;
                    }
                    else
                    {
                        result=true;break;

                    }
break;
            }
return result;
        }

    }
于 2013-11-11T10:46:00.757 回答
1
public static Boolean SearchFiles(string path1, string path2)
{
    if (isIdentical == false)
    {
        return false;
    }
    return true or false;
}
于 2013-11-11T09:56:53.123 回答
1
public static Boolean SearchFiles(string path1, string path2)
{

    if(isIdentical == false)
    {
        return false;
    }
    else
    {
        return true;
    }

}
于 2013-11-11T10:04:04.647 回答
0

把它放在方法的末尾

返回相同;

你没有返回任何值。这可能有效

于 2014-08-07T10:13:43.133 回答