我想调用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方法的推荐方法是什么?
答案 0 :(得分:11)
选择解决方案是正确的但使用Array.ConvertAll会更有效,因为它知道数组元素并且可以通过索引迭代元素。
var values = new string[] { "A", "B", "C" };
var redisValues = Array.ConvertAll(values, item => (RedisValue)item);
请注意,您还可以创建类似
的列表RedisValue[] values = { "A", "B", "C" };