F# 如何从F调用Redis StringSet()#

F# 如何从F调用Redis StringSet()#,f#,stackexchange.redis,F#,Stackexchange.redis,我正在使用StackExchange.Redis访问Redis实例 我有以下工作C#代码: 以下是我希望的等效F#代码: let Demo()= 让cx=ConnectionMultiplexer.Connect@“xxx.redis.cache.windows.net,ssl=true,password=xxx” 让cache=cx.GetDatabase() cache.StringSet(“key1”,“value”)|>忽略 但是,这不会编译-“没有与方法StringSet匹配的重载”

我正在使用StackExchange.Redis访问Redis实例

我有以下工作C#代码:

以下是我希望的等效F#代码:

let Demo()=
让cx=ConnectionMultiplexer.Connect@“xxx.redis.cache.windows.net,ssl=true,password=xxx”
让cache=cx.GetDatabase()
cache.StringSet(“key1”,“value”)|>忽略

但是,这不会编译-“没有与方法StringSet匹配的重载”。StringSet方法需要RedisKey和RedisValue类型的参数,而C#中似乎有一些编译器魔法将调用代码中的字符串转换为RedisKey和RedisValue。这种魔力在F#中似乎并不存在。有没有办法达到同样的效果?

这是工作代码,非常感谢@Daniel:

打开StackExchange.Redis
open System.Collections.Generic
让内联(~~)(x:^a):^b=(^a或^b):(静态成员op_隐式:^a->^b)x)
让我们演示一下()=
让cx=ConnectionMultiplexer.Connect@“xxx.redis.cache.windows.net,ssl=true,密码==xxx”
让cache=cx.GetDatabase()
//设置值-需要转换两个参数:
cache.StringSet(~~“key1”,“value”)|>忽略
//获取值-需要转换参数和结果:
cache.StringGet(~~“key1”)|>(~~)|>printfn“%s”

是否存在
RedisKey.op_Implicit
RedisValue.op_Implicit
运算符?@Daniel-看起来是这样的。如果导航到定义,我会生成以下.fsi:type RedisKey=。。。静态成员op_隐式:key:string->RedisKey静态成员op_隐式:key:byte[]->RedisKey:RedisKey->byte[]静态成员op_隐式:key:RedisKey->string然后需要执行
StringSet(RedisKey.op_隐式“key1”,RedisValue.op_隐式“value”)
。这些函数在C#中自动调用,而不是F#。你也可以。太棒了,看起来这会管用的。如果你把它作为一个答案发布,我会把它标记为这样,并给你神奇的互联点。谢谢我个人会将字符串扩展为toRedisKey和toRedisVal funs。更具可读性、可控性和清晰性。我有一个类似的问题,我有一个字符串键和值,我想把它放进去,然后从redis中取出,让searchToken=RedisKey.op_隐式(“myKey”+token)让resultValue=cache.StringGet(searchToken)让redisData=RedisValue.op_隐式(resultValue)当我运行此命令时,我得到:类型“RedisValue”不支持转换为类型“a”,不确定我做错了什么。我如何告诉RedisValue.op_它确实是一个字符串?
public static void Demo()
{
    ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("xxx.redis.cache.windows.net,ssl=true,password=xxx");

    IDatabase cache = connection.GetDatabase();

    cache.StringSet("key1", "value");
}