2017-01-24 2 views
0

Я следующий простого (тривиальный) методом в C#, который должен возвращать MAC Address выбранного network interface card (NIC):метод, возвращающие пустой байт [] вместо MAC-адрес

public byte[] GetMacAddress(int adapterIndex) 
{ 
    NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); 

    if ((adapterIndex >= networkInterfaces.Length) || (adapterIndex < 0)) 
    { 
     return new byte[6] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 
    } 
    else 
    { 
     return networkInterfaces[adapterIndex].GetPhysicalAddress().GetAddressBytes(); 
    } // if 
} // GetMacAddress 

Теперь метод вызывается из Program.cs (это main метода):

using System; 
using Comms.NwStack.IpLayer.IpGateway.Ndis; 

namespace NDISTester 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TCP_AdapterList networkAdapters = new TCP_AdapterList(); 

      Console.WriteLine(networkAdapters.GetName(0) + 
           " " + 
           networkAdapters.GetMacAddress(0).ToString()); 
      Console.ReadKey(); 
     } // Main 
    } // class 
} // namespace 

и вот результат:

Local Area Connection System.Byte[] 

Почему я становлюсь пустым MAC Address?

+1

Каждый класс NET является производным от базового класса _object_, который определяет метод ToString. Но метод ToString объекта базового класса не может быть точным для каждого класса. Поэтому, если класс нуждается в точной реализации ToString, он должен переопределить ToString с конкретной реализацией. Если класс не переопределяет ToString(), то базовая ToString просто вернет имя класса. Массив _byte [] _ ​​не имеет переопределения для ToString. – Steve

ответ

3

Байт-массив ToString метод возвращает имя класса вместо его данных. BitConverter.ToString(), чтобы получить byte[] данные в строку.

Использование

BitConverter.ToString(networkAdapters.GetMacAddress(0)); 

вместо

networkAdapters.GetMacAddress(0).ToString() 
+0

Это работает, но почему ?! – KernelPanic

Смежные вопросы