C# 正确使用Return关键字

C# 正确使用Return关键字,c#,C#,我对编程相当陌生,我有一个问题。我想获得网络上的计算机列表,我已经成功地做到了这一点,然后我可以通过使用.Count()获得有多少台计算机……问题是,在我的完整代码中有几个地方我想引用这个数字,每次我尝试使用c时,它都告诉我变量在其上下文中不存在。我试图建立自己的公开方法,但它要求我在搜索后提交一份适当的回报。我还是搞不懂。。有人能给我指出正确的方向吗?多谢各位 public void ComputersOnNetwork() { List<string> list = new

我对编程相当陌生,我有一个问题。我想获得网络上的计算机列表,我已经成功地做到了这一点,然后我可以通过使用.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;
       }       
public void ComputersOnNetwork()
{
列表=新列表();
使用(DirectoryEntry root=newdirectoryEntry(“WinNT:”))
{
foreach(计算机中的DirectoryEntry计算机。子对象)
{
if((computer.Name!=“Schema”))
{
列表.添加(计算机.名称);
}
}
foreach(列表中的字符串s)
{
int c=list.Count();
返回c;
}       

您的方法中可能缺少
return
语句。您需要有一个返回类型(在本例中可能是整数类型,用于返回计算机数)


您的方法中可能缺少
return
语句。您需要有一个返回类型(在本例中可能是整数类型,用于返回计算机数)


不需要进行最后的循环-如果列表包含所有计算机,则应该这样做:

  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();
  } 
public void ComputersOnNetwork()
{
列表=新列表();
使用(DirectoryEntry root=newdirectoryEntry(“WinNT:”))
{
foreach(计算机中的DirectoryEntry计算机。子对象)
{
if((computer.Name!=“Schema”))
{
列表.添加(计算机.名称);
}
}
}
返回list.Count();
} 
Return语句将在您点击它们时立即停止函数的执行,因此您的最终for循环将只运行一次


即使没有return语句,您也会遇到问题,因为
c
是在循环中声明的,它会超出范围,这就是为什么您以后无法在代码中引用它。在循环中声明变量时需要小心,它们会在每次迭代和l尽管您的代码可能会编译,但跟踪此类错误可能很棘手。

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

  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();
  } 
public void ComputersOnNetwork()
{
列表=新列表();
使用(DirectoryEntry root=newdirectoryEntry(“WinNT:”))
{
foreach(计算机中的DirectoryEntry计算机。子对象)
{
if((computer.Name!=“Schema”))
{
列表.添加(计算机.名称);
}
}
}
返回list.Count();
} 
Return语句将在您点击它们时立即停止函数的执行,因此您的最终for循环将只运行一次


即使没有return语句,您也会遇到问题,因为
c
是在循环中声明的,它会超出范围,这就是为什么您以后无法在代码中引用它。在循环中声明变量时需要小心,它们会在每次迭代和l尽管您的代码可能会编译,但跟踪此类错误可能会很棘手。

您必须有一个返回类型,并且您应该使用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");
    }
}
public int ComputersOnNetwork()
{
使用(var root=newdirectoryEntry(“WinNT:”))
{
返回root.Children.Cast().Count(x=>x.Name!=“Schema”);
}
}

您必须有一个返回类型,并且您应该使用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");
    }
}
public int ComputersOnNetwork()
{
使用(var root=newdirectoryEntry(“WinNT:”))
{
返回root.Children.Cast().Count(x=>x.Name!=“Schema”);
}
}

结尾不需要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;
   }
}

您不需要在最后使用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;
   }
}

请发布您正在使用的代码。您可以发布您尝试过的代码的相关部分吗?当您没有真正迭代列表中的元素时,为什么要使用
foreach
?另外,当您只需要计数时,为什么要保存到列表中?请发布您正在使用的代码。您可以发布您拥有的代码的相关部分吗ied?当你没有真正迭代列表中的元素时,为什么要使用
foreach
?另外,当你只需要计数时,为什么要保存到列表中?很抱歉,没有立即将代码保存到列表中。仍然在使用如何导航站点:)@CoreyDeising:我根据你问题的更新更新了我的答案。
totalItems.count
should是
列表。Count
@grampage:是的。我第一次发布时使用了一个同名变量。谢谢。现在更正它。@Shyju