我的编译器抛出错误:
名称' myIP'在当前上下文中不存在(CS0103)
以下是代码:
string HostName = Dns.GetHostName();//get HOSTNAME
string osVer = System.Environment.OSVersion.Version.ToString();
if (osVer.StartsWith("10"))
{
MessageBox.Show("Windows 10");
string myIP = Dns.GetHostEntry(HostName).AddressList[2].ToString();// Get the IP
}
else if (osVer.StartsWith("6"))
{
MessageBox.Show("Win7!");
string myIP = Dns.GetHostEntry(HostName).AddressList[3].ToString();// Get the IP
}
else
{
MessageBox.Show("Non Complient Operating System");
}
byte myIP3 = IPAddress.Parse(myIP).GetAddressBytes()[2];//Gets third octet of IP
byte myIP2 = IPAddress.Parse(myIP).GetAddressBytes()[1];//Gets second octet of IP
byte myIP1 = IPAddress.Parse(myIP).GetAddressBytes()[0];//Gets first octet of IP
答案 0 :(得分:1)
string myIp; <-- declare here
if (osVer.StartsWith("10"))
{
MessageBox.Show("Windows 10");
myIP = Dns.GetHostEntry(HostName).AddressList[2].ToString();// Get the IP
}
else if (osVer.StartsWith("6"))
{
MessageBox.Show("Win7!");
myIP = Dns.GetHostEntry(HostName).AddressList[3].ToString();// Get the IP
}
else {
//BTW. What to do here?
myIP = ?
}
答案 1 :(得分:0)
就像其他人所说的那样,应该在if语句之前定义“myIp”变量,因为if语句创建了自己的本地范围。
现在,当您在每个if语句中定义它时,“myIP”永远不会以任何方式在另一个范围内访问(比方说,在if语句之外,甚至在另一个范围内)。因此,我推荐以下
// Declare the myIp variable
string myIp = "";
if (osVer.StartsWith("10"))
{
MessageBox.Show("Windows 10");
// Make sure "myIP" isn't null before trying to use it (here, and on other places where you use it)
if(!string.IsNullOrWhiteSpace(myIp))
myIP = Dns.GetHostEntry(HostName).AddressList[2].ToString(); // Get the IP
}
else if (osVer.StartsWith("6"))
{
MessageBox.Show("Win7!");
// Make sure "myIP" isn't null before trying to use it (here, and on other places where you use it)
if(!string.IsNullOrWhiteSpace(myIp))
myIP = Dns.GetHostEntry(HostName).AddressList[3].ToString(); // Get the IP
}
else {
// Make sure "myIP" isn't null before trying to use it (here, and on other places where you use it)
if(!string.IsNullOrWhiteSpace(myIp))
myIP = "?";
这将定义myIp变量并使其在整个类或任何地方都可访问,并且只要您在尝试使用它们之前检查变量是否为空,那么您应该没问题。
答案 2 :(得分:-2)
2件事。
1)你应该在osVer之后,在if之前声明我的ip。 c#中的变量是块作用域,因此在if else-if else之后的行不可见,因为你在条件块中声明变量。
string myIP;
2)您没有将myIP分配给最终else语句中的任何内容。您应该至少为它指定一个空字符串值,无论是在声明它还是在最后的其他值。您不能拥有未分配的变量。