如何使用RedisValue []将数组传递给StackExchange.Redis方法?

时间:2015-02-24 16:01:09

标签: c# arrays redis stackexchange.redis

我想调用IDatabase.SortedSetAsync(StackExchange.Redis)。此方法的签名是:

Task<bool> SortedSetRemoveAsync(RedisKey key, RedisValue member,
        CommandFlags flags = CommandFlags.None);
Task<long> SortedSetRemoveAsync(RedisKey key, RedisValue[] members,
        CommandFlags flags = CommandFlags.None);

传递一个隐式转换为RevisValue的值(例如字符串)没有问题。但是,如果我尝试传入数组......

var key = "MYKEY";
var values = new string[] { "A", "B", "C" };

await database.SortedSetRemoveAsync(key, values);

...然后编译器不知道如何将字符串[]转换为RedisValue []。

我管理转化的唯一方法是进行逐项转换:

var values2 = values.Select(s => (Redisvalue) s).ToArray();
await database.SortedSetRemoveAsync(key, values2);

......我不确定这是否是最佳方式。

当有API方法期待数组时,很难传递一个数组...... unit tests通过传入一个空的RedisValue []数组并完全绕过这个问题来解决这个问题。 / p>

将数组参数传递给接受RedisValue []数组的StackExchange.Redis方法的推荐方法是什么?

1 个答案:

答案 0 :(得分:11)

选择解决方案是正确的但使用Array.ConvertAll会更有效,因为它知道数组元素并且可以通过索引迭代元素。

var values = new string[] { "A", "B", "C" };
var redisValues = Array.ConvertAll(values, item => (RedisValue)item);

请注意,您还可以创建类似

的列表
RedisValue[] values = { "A", "B", "C" };