Gig*_*igi 4 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);
Run Code Online (Sandbox Code Playgroud)
传递一个隐式转换为RevisValue的值(例如字符串)没有问题.但是,如果我尝试传入数组...
var key = "MYKEY";
var values = new string[] { "A", "B", "C" };
await database.SortedSetRemoveAsync(key, values);
Run Code Online (Sandbox Code Playgroud)
...然后编译器不知道如何将字符串[]转换为RedisValue [].
我管理转化的唯一方法是进行每项转化:
var values2 = values.Select(s => (Redisvalue) s).ToArray();
await database.SortedSetRemoveAsync(key, values2);
Run Code Online (Sandbox Code Playgroud)
......我不确定这是否是最佳方式.
很奇怪,当存在期望数组的API方法时,传递数组是如此困难...... 单元测试通过传入一个空的RedisValue []数组并完全绕过问题来实现简单方向.
将数组参数传递给接受RedisValue []数组的StackExchange.Redis方法的推荐方法是什么?
gui*_*lem 11
选择解决方案是正确的,但是使用Array.ConvertAll会更有效,因为它知道数组元素并且可以通过索引迭代元素.
var values = new string[] { "A", "B", "C" };
var redisValues = Array.ConvertAll(values, item => (RedisValue)item);
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以创建列表
RedisValue[] values = { "A", "B", "C" };
Run Code Online (Sandbox Code Playgroud)