Подтвердить что ты не робот

С# HashSet <string> в одну строку

У меня есть HashSet<string>, который добавляется к периодически. Я хочу сделать все HashSet для строки без выполнения цикла foreach. Есть ли у кого-нибудь пример?

4b9b3361

Ответ 1

Вы будете контактировать содержимое, независимо от того, явно ли вы его пишете или нет.

Однако, чтобы сделать это без явного письма, а если "cast" вы подразумеваете "concatenate", вы должны написать что-то вроде этого

string output = string.Join("", yourSet); // .NET 4.0
string output = string.Join("", yourSet.ToArray()); // .NET 3.5

Ответ 2

Если вы хотите, чтобы одна строка была конкатенацией значений в 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();
    }
}

Ответ 3

Если вы хотите, чтобы один метод получал все элементы hashset, конкатенированные, вы можете создать метод расширения.

[] 's

[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();
        }
    }
} 

Ответ 4

Вы можете использовать Linq:

hashSet.Aggregate((a,b)=>a+" "+b)

который вставляет пробел между двумя элементами вашего хэшета