如何将数组传递给采用 RedisValue[] 的 StackExchange.Redis 方法?
How to pass an array to StackExchange.Redis method taking RedisValue[]?
我想打电话给 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[] 数组来采取简单的方向,并且完全绕过这个问题。
将数组参数传递给接受 RedisValue[] 数组的 StackExchange.Redis 方法的推荐方法是什么?
select 解决方案是正确的,但使用 Array.ConvertAll 会更有效,因为它知道数组元素并且可以按索引迭代元素。
var values = new string[] { "A", "B", "C" };
var redisValues = Array.ConvertAll(values, item => (RedisValue)item);
请注意,您也可以像这样创建列表
RedisValue[] values = { "A", "B", "C" };
我想打电话给 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[] 数组来采取简单的方向,并且完全绕过这个问题。
将数组参数传递给接受 RedisValue[] 数组的 StackExchange.Redis 方法的推荐方法是什么?
select 解决方案是正确的,但使用 Array.ConvertAll 会更有效,因为它知道数组元素并且可以按索引迭代元素。
var values = new string[] { "A", "B", "C" };
var redisValues = Array.ConvertAll(values, item => (RedisValue)item);
请注意,您也可以像这样创建列表
RedisValue[] values = { "A", "B", "C" };