2014-10-01 15 views
7

Tôi có một mảng RedisValue[] được trả về từ máy khách StackExchange.Redis. Tôi muốn lấy từng giá trị (thực ra là các chuỗi JSON) trong mảng và nối chúng lại với nhau để nhận được một chuỗi hợp lệ JSON mà tôi có thể trả lại cho máy khách.Có cách nào để chuyển đổi RedisValue [] thành chuỗi [] không?

Đây là những gì tôi muốn làm ...

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

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

Tuy nhiên, điều này không làm việc vì results là một mảng của RedisValue không phải là một mảng của string. Có cách nào tiến thẳng và hiệu quả để thực hiện việc này ngoài việc lặp lại mảng RedisValue?

Trả lời

10

Không hiện, nhưng tôi có just pushed phương pháp mở rộng sau vào 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); 
    } 

Vì vậy: trong xây dựng tiếp theo, bạn chỉ có thể sử dụng results.ToStringArray(). Cho đến lúc đó, bạn chỉ có thể sao chép ở trên cục bộ.

+0

ALERT. Lưu ý nếu các giá trị là null, bạn sẽ không bao giờ thành công với 'values.ToStringArray()', tốt hơn nên dùng nó như 'ToStringArray (values)' mà không có phương thức mở rộng 'this' – Jaider

+0

@Jaider bạn có thể gọi các phương thức mở rộng trên' null' giá trị. Sau đây sẽ làm việc tốt: 'RedisValue [] vals = null; string [] foo = vals.ToStringArray(); '-' foo' sẽ là 'null', vì' return' đầu tiên. Điều này làm việc * chính xác bởi vì * trình biên dịch chỉ đơn giản là viết lại này như là 'string [] foo = ExtensionMethods.ToStringArray (vals);' –

+0

Wow, tôi rất ấn tượng! sau đó bỏ qua bình luận trước đó của tôi :) – Jaider

Các vấn đề liên quan