我想加入字符串以显示在消息框中,但不知道为什么我在这一行会收到错误:
IPAddress[] ips = Dns.GetHostAddresses(he.HostName);
var addr = string.Join(",",ips); // the error display invalid argument.
MessageBox.Show(addr);
我知道这听起来很基本。但我是新手,有人可以帮助我吗?
错误:
以下方法或属性之间的调用不明确:'string.Join(string,params object [])'和'string.Join(string,System.Collections.Generic.IEnumerable)'
答案 0 :(得分:5)
使用ToList
方法或显式广播:
string.Join(",", (IEnumerable<IPAddress>)ips);
或明确指定泛型参数:
string.Join<IPAddress>(",", ips);
编译器无法决定从以下哪一个中选择哪个重载:string.Join(string, params object[])
或string.Join(string,IEnumerable<IPAdress>)
所以你需要告诉编译器你要明确调用哪个方法。而且看起来你好了不需要foreach
循环。
答案 1 :(得分:2)
你不能只是“加入”一个对象列表并让它做一些有意义的事情......除非该类重写ToString()
。
尝试选择要显示的字段:
var addr = string.Join(",", ips.Select(x => x.SomeFieldToDisplay));
答案 2 :(得分:1)
首先,它似乎不需要for-loop。 string.Join
方法将为您完成这项工作。
其次,string.Join
的第二个参数应该(通常)为IEnumerable<string>
(请参阅here),但您尝试将其传递给IEnumerable<IPAddress>
。您可以将ips
保留为常规数组,但应该帮助Join
函数输出并将每个IPAddress
转换为您喜欢的任何字符串表示形式,例如标准IP地址表示法:
var addr = string.Join(",", ips.Select(ip => ip.ToString()).ToArray());
.ToArray()
可能需要也可能不需要,具体取决于您使用的.NET框架的版本。