如何将数组传递给接受RedisValue[]的StackExchange.Redis方法?

6

我想调用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);

如果编译器不知道如何将string[]转换为RedisValue[],那么你需要进行逐个元素的转换。以下是一个例子:
var values2 = values.Select(s => (Redisvalue) s).ToArray();
await database.SortedSetRemoveAsync(key, values2);

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

很奇怪,当有API方法期望数组时,传递一个数组如此困难...单元测试通过传递一个空的RedisValue[]数组并绕过了整个问题。

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

1个回答

15

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

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

请注意,您也可以像这样创建列表

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

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