C#中的Ping在不是第一个方法时返回null
我显然是C#的新手,对Powershell也有一些经验,但这一点让我感到困惑 我需要创建一个ping主机的方法,如果它收到回复,就向它发送一些Telnet命令,但是我被ping回复卡住了 如果我创建了该方法并将其作为命名空间中的唯一方法,或者至少是主方法,那么它的行为与预期的一样,并返回预期的结果 这项工作: 只要我想向同一名称空间添加其他方法,ping就会返回一个“null”值 这行不通C#中的Ping在不是第一个方法时返回null,c#,C#,我显然是C#的新手,对Powershell也有一些经验,但这一点让我感到困惑 我需要创建一个ping主机的方法,如果它收到回复,就向它发送一些Telnet命令,但是我被ping回复卡住了 如果我创建了该方法并将其作为命名空间中的唯一方法,或者至少是主方法,那么它的行为与预期的一样,并返回预期的结果 这项工作: 只要我想向同一名称空间添加其他方法,ping就会返回一个“null”值 这行不通 我肯定我错过了一些简单的东西,如果有人能解释为什么它在不是主菜单时返回空值,我非常感谢您的帮助!谢谢你对新
我肯定我错过了一些简单的东西,如果有人能解释为什么它在不是主菜单时返回空值,我非常感谢您的帮助!谢谢你对新来的家伙的耐心 在第二个示例中,有两个类都有一个名为Main()的静态函数 这些行(来自第二个版本) 创建PingTruck的实例,但不要将该实例分配给任何对象,然后检查名为PingStatus的类PingTruck的静态属性。在PingTruck.Main()中运行代码是不可能的 最简单的解决方案是更换
new PingTruck();
与
但是,最好将PingTruck中的静态内容更改为实例内容(Main(),但将其称为其他内容,如掺杂()和PingStatus)。然后,在程序中执行类似的操作
您需要PingTruck类的一个实例
class Program
{
public static void Main(string[] args)
//I'm thinking the below should run the PingTruck method and set the variable PingStatus,
//then write it's status to the console, but it returns a null value.
{
pingTruck = new PingTruck();
Console.WriteLine(pingTruck.PingMethod);
Console.ReadLine();
}
}
静态Main
方法适用于console类。要使用另一个类,只需使用另一个公共类即可
public class PingTruck
{
public string PingStatus;
public string PingMethod()
{
string IPAddress = "127.0.0.1";
int timeout = 7;
try
{ Ping Truck = new Ping();
PingReply reply = Truck.Send(IPAddress, timeout);
if (reply.Status == IPStatus.Success)
return PingStatus = "Found Truck";
else
return PingStatus = "Can't Find Truck";
}
catch (PingException)
{
return PingStatus = "No Truck";
}
}
}
调用
PingTruck.Main(字符串[]args)
方法时
如果PingTruck
只有Static
成员,为什么要创建它的实例
最简单的解决方案是:
PingTruck.Main(args);
Console.WriteLine(PingTruck.PingStatus);
Console.ReadLine();
但是,我强烈建议您检查代码设计。您创建对象的实例(尽管您从未对它做过任何操作): 但实际上,您从未调用执行任何操作的方法。相反,您只需立即检查状态:
Console.WriteLine(PingTruck.PingStatus)
由于从未调用逻辑,因此状态从未设置为任何值。因此它是null
的默认值
只需调用该方法:
PingTruck.Main(args);
Console.WriteLine(PingTruck.PingStatus);
还请注意,不需要对象的实例,因为方法和状态值都是静态的
还要注意的是,这段代码有一些不一定有意义的东西。虽然它可能“起作用”,但它肯定可以得到清理和澄清 例如,您的
PingTruck
类不需要所有内容都是静态的。如果删除静态
修饰符,则将在实例上使用成员:
var truck = new PingTruck();
truck.Main(args);
Console.WriteLine(truck.PingStatus);
此外,您的PingTruck.Main()
方法可能应该命名为其他名称。可能是类似于Ping()的东西。Main
并没有真正描述该方法的实际功能
该方法似乎也不需要args
参数,因为它从不使用它
(您似乎觉得应用程序中的所有方法都需要命名为Main(string[]args)
,并且必须是static
。我向您保证,事实并非如此。)
设置公共属性和返回值也没有多大意义。为什么不直接返回值呢?例如:
return "Found Truck";
然后在消费代码中:
var truck = new PingTruck();
Console.WriteLine(truck.Ping());
你从来没有真正使用过平车。。。Main(ArbitraryStringArrayHere)将填充PingStatus属性。。。
new PingTruck()
Console.WriteLine(PingTruck.PingStatus)
PingTruck.Main(args);
Console.WriteLine(PingTruck.PingStatus);
var truck = new PingTruck();
truck.Main(args);
Console.WriteLine(truck.PingStatus);
return "Found Truck";
var truck = new PingTruck();
Console.WriteLine(truck.Ping());