我对编程很新,我有一个问题。我想获得网络上的计算机列表,我已经成功完成了这项工作,然后我通过使用.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;
}
答案 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();