c# 关于return在foreach中的用法

编程小狂人 2013-03-14 04:45:30
我想写一个有字符串为返回值的方法,但是在方法内有foreach,如果我用了return的话,它就不往下执行了,怎么办啊?代码如下,求大神啊




public string GetFileType(string FileDirectory)
{
DirectoryInfo DI = new DirectoryInfo(FileDirectory);
FileSystemInfo[] f = DI.GetFileSystemInfos();
string Ex="";
foreach (FileSystemInfo i in f)
{
if (i is DirectoryInfo)
{
if ((i.Attributes & FileAttributes.Hidden) == 0)
{
Search(i.FullName);
return null;
}

}
else
{
if (Ex != "")
{
Ex = i.Extension;
return Ex;
}
else
{
Ex = Ex + "," + i.Extension;
return Ex;
}


}
}
return string.Empty;
}
...全文
1758 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
still_melody 2013-03-14
  • 打赏
  • 举报
回复
引用 11 楼 ygy597441072 的回复:
引用 8 楼 still_melody 的回复:引用 2 楼 ygy597441072 的回复:引用 1 楼 still_melody 的回复:break;怎么break啊,我想让他继续执行啊,为什么要Break 啊,我发现我加了Return就不往下执行了 break是结束整个循环体, continue是结束本次循环 哦,这个我知道了,我发现了我把递归写错了,Sea……
你在方法最后加了retrun 就应该没问题的,是不是你在if或者else里加过return
编程小狂人 2013-03-14
  • 打赏
  • 举报
回复
引用 8 楼 still_melody 的回复:
引用 2 楼 ygy597441072 的回复:引用 1 楼 still_melody 的回复:break;怎么break啊,我想让他继续执行啊,为什么要Break 啊,我发现我加了Return就不往下执行了 break是结束整个循环体, continue是结束本次循环
哦,这个我知道了,我发现了我把递归写错了,Search(i.FullName);而是GetFileType(i.FullName);如果在foreach内没有return就会报错,不是每个路径都有返回值
gxingmin 2013-03-14
  • 打赏
  • 举报
回复
引用 7 楼 ygy597441072 的回复:
引用 6 楼 gxingmin 的回复:引用 1 楼 still_melody 的回复:break; 应该是continue;继续下一个循环 我发现了我把递归写错了,Search(i.FullName);而是GetFileType(i.FullName);如果在foreach内没有return就会报错,不是每个路径都有返回值
public string GetFileType(string FileDirectory) { DirectoryInfo DI = new DirectoryInfo(FileDirectory); FileSystemInfo[] f = DI.GetFileSystemInfos(); string Ex=""; foreach (FileSystemInfo i in f) { if (i is DirectoryInfo) { if ((i.Attributes & FileAttributes.Hidden) == 0) { string str=GetFileType(i.FullName); if(str!=null && str.Length>0) Ex=Ex + "," + str; //return null; } } else { if (Ex == "") { Ex = i.Extension; //return Ex; } else { Ex = Ex + "," + i.Extension; //return Ex; } } } return Ex; }
qijialin 2013-03-14
  • 打赏
  • 举报
回复
continue; 正解
still_melody 2013-03-14
  • 打赏
  • 举报
回复
引用 2 楼 ygy597441072 的回复:
引用 1 楼 still_melody 的回复:break;怎么break啊,我想让他继续执行啊,为什么要Break 啊,我发现我加了Return就不往下执行了
break是结束整个循环体, continue是结束本次循环
编程小狂人 2013-03-14
  • 打赏
  • 举报
回复
引用 6 楼 gxingmin 的回复:
引用 1 楼 still_melody 的回复:break; 应该是continue;继续下一个循环
我发现了我把递归写错了,Search(i.FullName);而是GetFileType(i.FullName);如果在foreach内没有return就会报错,不是每个路径都有返回值
gxingmin 2013-03-14
  • 打赏
  • 举报
回复
引用 1 楼 still_melody 的回复:
break;
应该是continue;继续下一个循环
  • 打赏
  • 举报
回复
public string GetFileType(string FileDirectory)
        {
            DirectoryInfo DI = new DirectoryInfo(FileDirectory);
            FileSystemInfo[] f = DI.GetFileSystemInfos();
            string Ex="";
            foreach (FileSystemInfo i in f)
            {
                if (i is DirectoryInfo)
                {
                    if ((i.Attributes & FileAttributes.Hidden) == 0)
                    {
                        Search(i.FullName);
                        return null;
                    }
  
                }
                else
                {
                    if (Ex != "")
                    {
                        Ex = i.Extension;
                      break;
                    }
                    else
                    {
                        Ex = Ex + "," + i.Extension;
                        break;
                    }
  
  
                }
            }
         return Ex;
        } 
gxingmin 2013-03-14
  • 打赏
  • 举报
回复
根据上下文目测if (Ex != "")应该写反了
public string GetFileType(string FileDirectory)
        {
            DirectoryInfo DI = new DirectoryInfo(FileDirectory);
            FileSystemInfo[] f = DI.GetFileSystemInfos();
            string Ex="";
            foreach (FileSystemInfo i in f)
            {
                if (i is DirectoryInfo)
                {
                    if ((i.Attributes & FileAttributes.Hidden) == 0)
                    {
                        Search(i.FullName);
                        //return null;
                    }
 
                }
                else
                {
                    if (Ex == "")
                    {
                        Ex = i.Extension;
                        //return Ex;
                    }
                    else
                    {
                        Ex = Ex + "," + i.Extension;
                        //return Ex;
                    }
 
 
                }
            }
         return Ex;    
        } 
gxingmin 2013-03-14
  • 打赏
  • 举报
回复
public string GetFileType(string FileDirectory)
        {
            DirectoryInfo DI = new DirectoryInfo(FileDirectory);
            FileSystemInfo[] f = DI.GetFileSystemInfos();
            string Ex="";
            foreach (FileSystemInfo i in f)
            {
                if (i is DirectoryInfo)
                {
                    if ((i.Attributes & FileAttributes.Hidden) == 0)
                    {
                        Search(i.FullName);
                        //return null;
                    }
 
                }
                else
                {
                    if (Ex != "")
                    {
                        Ex = i.Extension;
                        //return Ex;
                    }
                    else
                    {
                        Ex = Ex + "," + i.Extension;
                        //return Ex;
                    }
 
 
                }
            }
         return Ex;    
        } 
编程小狂人 2013-03-14
  • 打赏
  • 举报
回复
引用 1 楼 still_melody 的回复:
break;
怎么break啊,我想让他继续执行啊,为什么要Break 啊,我发现我加了Return就不往下执行了
still_melody 2013-03-14
  • 打赏
  • 举报
回复
break;

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧