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

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)