如何从 class 调用函数

How can I call a function from a class

我真的很困惑。 我的Program.cs如下:

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 的 class,这是我所有代码的地方。这是我的 WebSitePing.cs class:

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");
                    }
                }
            }
        }
    }
}

我必须将 WebSitePing.cs class 调用到 Program.cs 中,以便我可以创建 PingLog.csv 文件和 运行 [=] 中的代码20=] 并且我的所有 ping 结果都将保存到我从 Program.cs 创建的文件中。 有人可以帮我弄清楚我该怎么做吗?

试试这个:

string filename = @"PingLog.csv";
{
    using (var writer = new StreamWriter(filename, true))
    {
        Console.SetOut(writer);
        var ping = new WebSitePing();
        ping.Ping();
    }
}

您不仅必须在调用 .Ping() 之前创建 WebSitePing 的实例,而且还必须将 Console 的输出设置为您的 [=15] =].

你最好制作 Ping() return IEnumerable<string> 然后写出这些行。这将是一个更干净的程序。


您的 WebSitePing 代码有点损坏。这是最简单的修复方法。

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));
        }
    }
}

你的问题在上面的评论中基本得到了解答,这里是:

namespace PingApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var pinger = new WebSitePing();

            pinger.Ping();
        }
    }
}

除此之外,您需要将 using 块移动到 Ping() 方法中,而不是在 Program.cs 本身中。这样就不用 Console.WriteLine(),而是将输出附加到 StreamWriter

或者,您可以像@Enigmativity 的回答一样设置 Console 的输出,这会将您的 Console.WriteLine() 调用重定向到 StreamWriter 而不是调试器控制台。