有没有一种方法可以将 RedisValue[] 转换为 string[]?

14

我有一个由StackExchange.Redis客户端返回的数组RedisValue[]。数组中的每个值实际上都是JSON字符串,我想将它们连接在一起,以生成一个有效的JSON字符串返回给客户端。

这是我想要做的:

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

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

然而,这并不起作用,因为results是一个RedisValue数组而不是string数组。除了迭代 RedisValue 数组之外,是否有一种直接且高效的方法可以做到这一点?

1个回答

22

目前还没有,但是我刚刚在ExtensionMethods.cs中添加了下面这个扩展方法:just pushed

    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()。在那之前,您可以将上面的内容复制到本地。

警告。请注意,如果值为null,则永远无法成功使用values.ToStringArray(),因此最好像ToStringArray(values)这样使用它,而不使用扩展方法this - Jaider
2
@Jaider,你可以在null值上调用扩展方法。以下代码将正常工作:RedisValue[] vals = null; string[] foo = vals.ToStringArray(); - foo将是null,因为第一个return。这正是因为编译器将其简单地重写为string[] foo = ExtensionMethods.ToStringArray(vals); - Marc Gravell
哇,我印象深刻!那就忽略我之前的评论吧 :) - Jaider
@MarcGravell 嗯.. 当我在 fx MEMORY STATS 上使用该方法,并将 RedisValue[] 更改为 RedisResult[] 时,我收到一个错误提示,因为在索引 16 中,我有一个数组内嵌数组 - 是否有任何解决方案或建议? - nelion
@badaboomskey,你能具体一些吗?你应该有一个RedisResult - 因为它是一个非典型的结果结构,所以你需要手动探索每个节点进行检查。有没有具体的问题可以通过示例进行讨论? - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接