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()
return
IEnumerable
,然后写出这些行。这将是一个更干净的计划


您的
网站
代码有点不完整。这是最简单的解决方法

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中的所有代码