【问题标题】:How to return a variable in a void如何在 void 中返回变量
【发布时间】:2018-10-11 17:54:01
【问题描述】:

我有以下代码:

static void Scan(string path)
    {
        try{
               foreach (var file in Directory.EnumerateFiles(path, "zfsdfsdfsb.txt")){
                  Console.WriteLine("FILE: " + file);   
               }

              foreach (var dir in Directory.EnumerateDirectories(path)){
                  Console.WriteLine("DIRECTORY: " + dir);
                  Scan(dir);
               }
           }
    }

我想尽快停止函数并访问变量

Console.WriteLine("FILE: " + file);

已触发。

我试图返回它,但它没有做任何事情,我如何设置变量并在找到文件后立即停止函数?

【问题讨论】:

  • 很难知道你的意思。为什么不发布您尝试过的内容,也许我们会知道您正在尝试做什么
  • 但它没有做任何事情 - 我确信它做了某事
  • 这是为了调试目的吗?
  • 您的代码看起来就像您实际上是在尝试查看给定目录中的给定文件是否存在。对吗?
  • 如果要返回一个值,则将返回类型从 void 更改为该方法应该返回的任何类型。

标签: c# file void


【解决方案1】:

将您的 void 更改为 string static string Scan(string path).

然后,在你的循环中,找到字符串时返回:

foreach (var file in Directory.EnumerateFiles(path, "zfsdfsdfsb.txt")){
     Console.WriteLine("FILE: " + file);   
     return file;
}

如果没有找到,您还需要在方法末尾返回一个字符串。

【讨论】:

  • 如果他想返回多个文件,也许他应该返回IEnumerable<string> 并改为使用yield return file。否则,如果您只想返回一个文件,则此解决方案有效。
  • 是的,我不确定他真正想要什么,也没有时间深入研究。我只是想解决他的两个主要问题:获得价值作为回报;并在写入控制台后停止处理。
  • 扫描的递归调用也需要调整
  • 我其实只想返回一个文件
【解决方案2】:

如果您正在递归查找与给定模式匹配的文件

static string Scan(string path)
    {
        try{
               foreach (var file in Directory.EnumerateFiles(path, "zfsdfsdfsb.txt")){
                  Console.WriteLine("FILE: " + file);   
                  return file;
               }

              foreach (var dir in Directory.EnumerateDirectories(path)){
                  Console.WriteLine("DIRECTORY: " + dir);
                  var ret = Scan(dir);
                  if(ret != null)
                      return ret;
               }
           }
         return null;
    }

如果您正在寻找特定文件,请将第一个循环替换为

 var fpath = Path.Combine(path,"zfsdfsdfsb.txt");
   if (File.Exists(fpath))
         return fpath;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多