无法从If语句中获取字符串

时间:2017-06-26 00:31:52

标签: c#

我的编译器抛出错误:

  

名称' 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

3 个答案:

答案 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语句中的任何内容。您应该至少为它指定一个空字符串值,无论是在声明它还是在最后的其他值。您不能拥有未分配的变量。