2014-10-01 1 views
7

У меня есть массив RedisValue[], возвращенный с клиента StackExchange.Redis. Я хочу взять каждое из значений (которые фактически являются строками JSON) в массиве и объединить их, чтобы получить допустимую строку JSON, которую я могу вернуть клиенту.Есть ли способ конвертировать RedisValue [] в строку []?

Вот что я хочу сделать ...

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

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

Однако, это не работает, потому что results является массивом RedisValue не массив string. Есть ли прямой и эффективный способ сделать это иначе, чем просто повторить массив RedisValue?

ответ

10

Не в настоящее время, но у меня есть just pushed следующий метод расширения в 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); 
    } 

Итак: в следующей сборке, вы можете просто использовать results.ToStringArray(). До тех пор вы могли бы просто скопировать выше локально.

+0

ALERT. Обратите внимание, что если значения равны нулю, вы никогда не преуспеете с 'values.ToStringArray()', поэтому лучше использовать его как 'ToStringArray (значения)' без метода расширения 'this' – Jaider

+0

@Jaider вы можете вызывать методы расширения на' null' значения. Следующее будет прекрасно работать: 'RedisValue [] vals = null; string [] foo = vals.ToStringArray(); '-' foo' будет 'null', из-за первого' return'. Это работает * именно потому, что * компилятор просто перезаписывает это как 'string [] foo = ExtensionMethods.ToStringArray (vals);' –

+0

Вау, я впечатлен! то проигнорируйте мой предыдущий комментарий :) – Jaider

 Смежные вопросы

  • Нет связанных вопросов^_^