我有一个HashSet<string>
定期添加。我想要做的是将整个HashSet转换为字符串而不进行foreach循环。有没有人有例子?
答案 0 :(得分:37)
无论是否明确地写一个内容,你都会遍历内容。
但是,如果没有明确的写作,并且如果通过“cast”你的意思是“连接”,你会写这样的东西
string output = string.Join("", yourSet); // .NET 4.0
string output = string.Join("", yourSet.ToArray()); // .NET 3.5
答案 1 :(得分:4)
如果你想要一个单独的字符串,它是HashSet中值的串联,那么这应该有用......
class Program
{
static void Main(string[] args)
{
var set = new HashSet<string>();
set.Add("one");
set.Add("two");
set.Add("three");
var count = string.Join(", ", set);
Console.WriteLine(count);
Console.ReadKey();
}
}
答案 2 :(得分:2)
如果你想要一个方法来连接所有hashset的项目,你可以创建一个扩展方法。
[]的
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
HashSet<string> hashset = new HashSet<string>();
hashset.Add("AAA");
hashset.Add("BBB");
hashset.Add("CCC");
Assert.AreEqual<string>("AAABBBCCC", hashset.AllToString());
}
}
public static class HashSetExtensions
{
public static string AllToString(this HashSet<string> hashset)
{
lock (hashset)
{
StringBuilder sb = new StringBuilder();
foreach (var item in hashset)
sb.Append(item);
return sb.ToString();
}
}
}
答案 3 :(得分:1)
您可以使用Linq:
hashSet.Aggregate((a,b)=>a+" "+b)
在hashset的两个元素之间插入一个空格