2014-10-01 4 views
7

Mam tablicę RedisValue[] zwróconą z klienta StackExchange.Redis. Chcę wziąć każdą z wartości (które w rzeczywistości są JSON ciągów) w tablicy i połączyć je razem, aby uzyskać prawidłowy ciąg znaków JSON, które można zwrócić do klienta.Czy istnieje sposób przekonwertować RedisValue [] na ciąg []?

Oto, co chcę zrobić ...

var results = redis.HashGet("srch", ArrayOfRedisKeys[]); 

string returnString = "[" + string.Join(results, ",") + "]"; 

Jednak to nie działa, ponieważ results jest tablicą RedisValue nie tablicą string. Czy istnieje prosty i skuteczny sposób na zrobienie tego innego niż tylko iterowanie tablicy RedisValue?

Odpowiedz

10

Obecnie nie, ale mam just pushed następujące metody rozszerzenie do ExtensionMethods.cs:

static readonly string[] nix = new string[0]; 
    /// <summary> 
    /// Create an array of strings from an array of values 
    /// </summary> 
    public static string[] ToStringArray(this RedisValue[] values) 
    { 
     if (values == null) return null; 
     if (values.Length == 0) return nix; 
     return Array.ConvertAll(values, x => (string)x); 
    } 

Więc: w następnej kompilacji, można po prostu użyć results.ToStringArray(). Do tego czasu możesz po prostu skopiować powyższe lokalnie.

+0

ALERT. Zauważ, że jeśli wartości są zerowe, nigdy nie odniesiesz sukcesu z 'values.ToStringArray()', więc lepiej używać go jak 'ToStringArray (wartości)' bez metody rozszerzenia 'this' – Jaider

+0

@Jaider możesz wywoływać metody rozszerzania na' null' wartości. Następujące działa dobrze: 'RedisValue [] vals = null; string [] foo = vals.ToStringArray(); '-' foo' ma wartość 'null', z powodu pierwszego' return'. Działa to * właśnie dlatego, że * kompilator po prostu przepisuje to jako 'string [] foo = ExtensionMethods.ToStringArray (vals);' –

+0

Wow, jestem pod wrażeniem! następnie zignoruj ​​mój poprzedni komentarz :) – Jaider