C# 如何从类调用函数
我真的很困惑。 我的程序如下:C# 如何从类调用函数,c#,function,class,ping,C#,Function,Class,Ping,我真的很困惑。 我的程序如下: using System; using System.IO; using System.Net.NetworkInformation; using System.Collections.Generic; namespace PingApp { class Program { static void Main(string[] args) { string filename = @"PingL
using System;
using System.IO;
using System.Net.NetworkInformation;
using System.Collections.Generic;
namespace PingApp
{
class Program
{
static void Main(string[] args)
{
string filename = @"PingLog.csv";
{
using (var writer = new StreamWriter(filename, true))
{
}
}
}
}
}
然后我有一个名为WebSitePing.cs的类,这是我所有代码的地方。这是我的WebSitePing.cs课程:
using System;
using System.Collections.Generic;
using System.Net.NetworkInformation;
namespace PingApp
{
public class WebSitePing
{
public void Ping()
{
var lstWebSites = new List<string>
{
"www.mearstransportation.com",
"www.amazon.com",
"www.ebay.com",
"www.att.com",
"www.verizon.com",
"www.sprint.com",
"www.centurylink.com",
"www.yahoo.com"
};
foreach (string website in lstWebSites)
{
var roundTripTime = new List<string>();
for (var i = 0; i < 4; i++)
{
try
{
var myPing = new Ping();
var reply = myPing.Send(website, 1000);
if (reply != null)
{
Console.WriteLine("{0}, {1}", website, string.Join(" , ", roundTripTime));
}
}
catch
{
Console.WriteLine("ERROR: You have some TIMEOUT issue");
}
}
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Net.NetworkInformation;
名称空间PingApp
{
公共类网站
{
公开作废
{
var lstWebSites=新列表
{
“www.meartransportation.com”,
“www.amazon.com”,
“www.ebay.com”,
“www.att.com”,
“www.verizon.com”,
“www.sprint.com”,
“www.centurylink.com”,
“www.yahoo.com”
};
foreach(lstWebSites中的字符串网站)
{
var roundTripTime=新列表();
对于(变量i=0;i<4;i++)
{
尝试
{
var myPing=新Ping();
var reply=myPing.Send(网站,1000);
如果(回复!=null)
{
Console.WriteLine(“{0},{1}”,网站,string.Join(“,”,roundTripTime));
}
}
抓住
{
WriteLine(“错误:您有一些超时问题”);
}
}
}
}
}
}
我必须将我的WebSitePing.cs类调用到Program.cs中,这样我就可以创建PingLog.csv文件并运行WebSitePing.cs中的代码,所有ping结果都将保存到我从Program.cs创建的文件中。
有人能帮我想办法吗?试试这个:
string filename = @"PingLog.csv";
{
using (var writer = new StreamWriter(filename, true))
{
Console.SetOut(writer);
var ping = new WebSitePing();
ping.Ping();
}
}
在调用.Ping()
之前,不仅需要创建网站Ping的实例,还需要将控制台的输出设置为编写器的输出
您最好先执行Ping()
returnIEnumerable
,然后写出这些行。这将是一个更干净的计划
您的网站代码有点不完整。这是最简单的解决方法
public class WebSitePing
{
public void Ping()
{
var lstWebSites = new List<string>
{
"www.mearstransportation.com",
"www.amazon.com",
"www.ebay.com",
"www.att.com",
"www.verizon.com",
"www.sprint.com",
"www.centurylink.com",
"www.yahoo.com"
};
foreach (string website in lstWebSites)
{
var roundTripTime = new List<long>();
for (var i = 0; i < 4; i++)
{
using (var myPing = new Ping())
{
var reply = myPing.Send(website, 1000);
if (reply != null)
{
roundTripTime.Add(reply.RoundtripTime);
}
}
}
Console.WriteLine("{0}, {1}", website, String.Join(", ", roundTripTime));
}
}
}
公共类网站
{
公开作废
{
var lstWebSites=新列表
{
“www.meartransportation.com”,
“www.amazon.com”,
“www.ebay.com”,
“www.att.com”,
“www.verizon.com”,
“www.sprint.com”,
“www.centurylink.com”,
“www.yahoo.com”
};
foreach(lstWebSites中的字符串网站)
{
var roundTripTime=新列表();
对于(变量i=0;i<4;i++)
{
使用(var myPing=new Ping())
{
var reply=myPing.Send(网站,1000);
如果(回复!=null)
{
roundTripTime.Add(reply.roundTripTime);
}
}
}
Console.WriteLine(“{0},{1}”,网站,String.Join(“,”,roundTripTime));
}
}
}
上面的评论基本上回答了您的问题,但这里是:
namespace PingApp
{
class Program
{
static void Main(string[] args)
{
var pinger = new WebSitePing();
pinger.Ping();
}
}
}
除此之外,您还需要使用块将移动到Ping()
方法中,而不是在程序.cs
本身中。这样,您就不用使用Console.WriteLine()
,而是将输出附加到StreamWriter
中
或者,您可以像@Enigmativity的答案一样设置控制台的输出,这将把控制台.WriteLine()
调用重定向到StreamWriter
而不是调试器控制台。在程序.cs
文件中,您需要实例化网站类。然后,您将能够使用该实例调用您的Ping()
方法。或者,将要调用的方法设置为静态(它似乎不依赖任何实例变量),但是我同意,更好的方法可能只是实例化WebSitePing,通过在Program.cs
中执行var a=newWebsitePing()
来创建WebSitePing对象的实例。然后通过执行a.Ping()
调用该方法。我是c#新手,请给我一个例子好吗?如果我尝试此方法,可能会重复。我会在.csv文件中获取网站,但不会获得Ping结果,我如何打印Ping结果?@NewDev-你在WebSitePing
中的代码不正确。无法从.Send()
呼叫的回复中获取时间。您知道我如何修复它吗?为什么不正确?当我把所有的东西都放在一个文件中时,它就工作了。@NewDev-我已经添加了修复程序。太好了,非常感谢你……我一整天都在尝试这样做-我正在尝试学习C#,有什么建议吗?但是在@Enigmativity的回答中,它返回了网站,但没有ping结果,我认为我没有阅读WebSitePing.cs中的所有代码