正确使用Return Keyword

时间:2012-05-22 23:21:26

标签: c#

我对编程很新,我有一个问题。我想获得网络上的计算机列表,我已经成功完成了这项工作,然后我通过使用.Count()获得了多少台计算机...问题是,我有几个地方在我的全部我希望引用该数字的代码,每当我尝试使用c时,它告诉我变量在其上下文中不存在。我试图制作我自己的公共方法但是它要求我进行适当的返回,并在搜索之后。我仍然无法弄清楚..有人能指出我正确的方向吗?谢谢。

public void ComputersOnNetwork()
{
   List<string> list = new List<string>();
   using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
   {
       foreach (DirectoryEntry computer in computers.Children)
       {
           if ((computer.Name != "Schema"))
           {
               list.Add(computer.Name);
           }
       }

       foreach (string s in list)
       {
          int c = list.Count();
          return c;
       }       

4 个答案:

答案 0 :(得分:2)

可能您错过了方法中的return语句。您需要有一个返回类型(在这种情况下可能是整数类型,因为您返回计算机数量)

public int ComputersOnNetwork()
{        
  List<string> list = new List<string>();
  using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
  {
       foreach (DirectoryEntry computer in computers.Children)
       {
          if ((computer.Name != "Schema"))
          {
             list.Add(computer.Name);
          }
       }
  }
  return list.Count;     
}

现在你可以在任何你想要的地方调用这个

int totalInThisCase=ComputersOnNetwork();

答案 1 :(得分:1)

你必须有一个返回类型,你应该使用count变量而不是添加到列表然后返回计数(同样,为什么你在列表上迭代?你不需要这样做)

始终逻辑地阅读您的代码,看看这些操作是否在逻辑上正确执行。

public int ComputersOnNetwork()
{
    int count = 0;

    using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
    {
        foreach (DirectoryEntry computer in root.Children)
        {
            if ((computer.Name != "Schema"))
            {
                count++;
            }
        }

    return count;
}

或者您可以使用LINQ来创建简短版本:

public int ComputersOnNetwork()
{
    using (var root = new DirectoryEntry("WinNT:"))
    {
        return root.Children.Cast<DirectoryEntry>().Count(x => x.Name != "Schema");
    }
}

答案 2 :(得分:0)

没有必要进行最后的循环 - 如果列表包含所有计算机,那么应该这样做:

  public void ComputersOnNetwork()
  {
       List<string> list = new List<string>();
       using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
       {
           foreach (DirectoryEntry computer in computers.Children)
           {
               if ((computer.Name != "Schema"))
               {
                   list.Add(computer.Name);
               }
           }
       }

      return list.Count();
  } 

返回语句会在您触及它们时立即停止执行某个函数,因此您的最终for循环只会运行一次。

即使没有return语句,你也会遇到问题,因为在循环中声明c并且它已经超出范围,这就是你无法引用的原因稍后在你的代码中。你需要注意在循环中声明变量,它们会在每次迭代时重新定义,虽然你的代码可能会编译,但跟踪这些错误可能很棘手。

答案 3 :(得分:0)

最后你不需要foreach循环。你永远不会使用变量“s”,因此浪费了处理。

要获得您想要的内容,请更改您的方法以重新调整int而不是void,然后在结尾处返回list.Count。

public int ComputersOnNetwork()
{
   List<string> list = new List<string>();
   using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
   {
       foreach (DirectoryEntry computer in computers.Children)
       {
           if ((computer.Name != "Schema"))
           {
               list.Add(computer.Name);
           }
       }

       int c = list.Count;
       return c;
   }
}

然后,只要您需要值,就可以调用方法:

Int computerCount = ComputersOnNetwork();