c# - parser - remove html tags from string




Come posso generare un flusso da una stringa? (8)

Aggiungi questo a una classe di utility stringa statica:

public static Stream ToStream(this string str)
{
    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(str);
    writer.Flush();
    stream.Position = 0;
    return stream;
}

Questo aggiunge una funzione di estensione in modo da poter semplicemente:

using (var stringStream = "My string".ToStream())
{
    // use stringStream
}

Devo scrivere un unit test per un metodo che prende uno stream che proviene da un file di testo. Mi piacerebbe fare qualcosa di simile a questo:

Stream s = GenerateStreamFromString("a,b \n c,d");

Ecco qui:

private Stream GenerateStreamFromString(String p)
{
    Byte[] bytes = UTF8Encoding.GetBytes(p);
    MemoryStream strm = new MemoryStream();
    strm.Write(bytes, 0, bytes.Length);
    return strm;
}


Un'altra soluzione:

public static MemoryStream GenerateStreamFromString(string value)
{
    return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));
}

Usiamo i metodi di estensione elencati di seguito. Penso che dovresti fare in modo che lo sviluppatore prenda una decisione sulla codifica, quindi c'è meno magia coinvolta.

public static class StringExtensions {

    public static Stream ToStream(this string s) {
        return s.ToStream(Encoding.UTF8);
    }

    public static Stream ToStream(this string s, Encoding encoding) {
        return new MemoryStream(encoding.GetBytes(s ?? ""));
    }
}

Utilizzare la classe MemoryStream , chiamando Encoding.GetBytes per trasformare la stringa in una matrice di byte prima.

Successivamente hai bisogno di un TextReader nello stream? In tal caso, è possibile fornire direttamente un StringReader e ignorare i passaggi MemoryStream e Encoding .


/// <summary>
/// Get Byte[] from String
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static byte[] GetBytes(string str)
{
  byte[] bytes = new byte[str.Length * sizeof(char)];
  System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
  return bytes;
}

/// <summary>
/// Get Stream from String
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static Stream GetStream(string str)
{
  return new MemoryStream(GetBytes(str));
}

public Stream GenerateStreamFromString(string s)
{
    return new MemoryStream(Encoding.UTF8.GetBytes(s));
}




stream