C# 打印出MAC地址

C# 打印出MAC地址,c#,string-formatting,C#,String Formatting,只是尝试使用string.Format()将系统MAC地址转换为文本格式。但它不起作用: byte[] MacAddr = new byte[6]; // this works, but rather clumzy mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAdd

只是尝试使用
string.Format()
将系统MAC地址转换为文本格式。但它不起作用:

byte[] MacAddr = new byte[6];

// this works, but rather clumzy
mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}",            
          MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5]);

// give me index error
mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr);
Edit1:好的,我错了,但它似乎是
string。format
适用于
string[]

我可以看到
字符串有一个重载方法。format

格式(字符串,数组[]()[])
。是否可以创建某种形式的字节[],可以将其视为数组[]()[]?

出现错误是因为您想格式化6个项目,但参数列表中只有1个

//6 parameters expected, only one "MacAddr" given
mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr); 
与您的工作方法相比,这里有一个简短的版本

mac = string.Join("-", MacAddr.Select(x => x.ToString("X2")));

这是因为您指定的格式包含6个参数,但仅提供一个:

//expected 6 parameters, provided only one
mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr); 
如果使用C#6.0,还可以使用字符串插值:

 //string interpolation
    mac = $"{MacAddr[0]}:X2-{MacAddr[1]}:X2-{MacAddr[2]}:X2-{MacAddr[3]}:X2-{MacAddr[4]}:X2-{MacAddr[5]}:X2"; 

string.Format()
函数中只有1个参数,但根据需要,它需要6个参数。 您可以使用
String.Join
以获得更好的可读性-

mac = string.Join("-", MacAddr.Select(x => x.ToString(":X2")));

尝试
位转换器

mac = BitConverter.ToString(MacAddr);

BitConverter.ToString(byte[])
获取所需的确切字符串,尽管MAC地址通常用冒号分隔,而不是破折号。

索引错误是什么?“索引(基于零)必须大于或等于零,并且小于参数列表的大小。”。听起来好像MacAddr被看作是一个单独的对象。不是数组?是的,第二种方法失败了,因为在参数5之前您引用了“参数1”、“参数2”等,但您只提供了一个参数(参数0)。你可以使用
BitConverter.ToString
来代替,但还是坚持你的第一种方法。这会让你错过JavaScript中的spread操作符:(谢谢,我在哪里可以找到这个
select
方法的引用?那是Linq谢谢。那些Linq的东西对我来说很新。