2015-02-24 41 views
2

我想致電IDatabase.SortedSetAsync(StackExchange.Redis)。此方法的簽名是:如何將數組傳遞給採用RedisValue []的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方法的推薦方法是什麼?

回答

8

選擇解決方案是正確的,但使用Array.ConvertAll會更高效,因爲它知道數組元素並且可以通過索引迭代元素。

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

注意你也可以創建列表像

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