ToString为单位值()抛出NullReferenceException

Grz*_*cki 4 generics f# type-inference

假设我们有一个非常简单的功能

let fn a = a.ToString()
Run Code Online (Sandbox Code Playgroud)

它的类型被推断为a -> string 但是,将单位值传递给函数会导致NullReferenceException.

在如上所述的简单函数的情况下,这可能很容易解决,但我实际上是在一个更复杂的场景中:

let eitherToHttp e = 
    match e with
    | Either.Ok v ->        OK (v.ToString()) 
    | Either.Bad reason ->  reasonToErrorCode reason
Run Code Online (Sandbox Code Playgroud)

这种类型是Either<'a, RejectReason> -> WebPart(这里WebPartEither实际上无关紧要)

在一个场景的类型eEither<unit, RejectReason>函数抛出酷似在简单的场景.

我怎样才能以一种好的方式克服这个问题?是否应将类型推断为通用类型,如果事实上这不适用于所有类型?

Mar*_*ann 6

使用内置string函数而不是调用ToString对象:

> string 42;;
val it : string = "42"
> string ();;
val it : string = ""
Run Code Online (Sandbox Code Playgroud)