如何从LanguageExt的Validation<Error, T>类型中仅提取错误消息
如何从LanguageExt的Validation<Error, T>类型中仅提取错误消息
看起来你遇到的问题是,LanguageExt的Validation类型直接调用ToString()时,会输出整个验证结构的字符串,而不是你想要的单个错误消息对吧?这是因为你在Match方法里拿到的error参数其实是错误的集合(LanguageExt的Validation支持多错误累积,返回的是一个错误序列),不是单个错误实例,所以直接ToString()才会得到ValidationData(Fail, 0, [xxx])这样的结果。
我来给你调整一下代码,解决这个问题:
首先,你的场景里只会返回单个错误,所以可以直接从错误集合中取出第一个错误消息,修改Match的分支逻辑:
ValidateStartingNumberError() .Match( () => None, errors => DisplayError(errors.Head()) // 取集合中的第一个错误消息 );
如果之后你需要处理多个错误的场景,也可以把所有错误拼接起来展示:
ValidateStartingNumberError() .Match( () => None, errors => DisplayError(string.Join(Environment.NewLine, errors)) );
另外顺手提个小细节:你的ValidateStartingNumberError方法参数是int number,但方法里用的是this.number,而且int.TryParse的参数如果是字符串类型的话,这个方法参数应该改成string number才更合理?大概率是你写代码时的小疏忽,注意一下就好。
还有,你用Fail<Error,Unit>("Starting number is not a valid number")传入的错误本身就是字符串类型,所以直接取errors.Head()就能拿到原始的错误消息,不需要再调用ToString(),直接传给DisplayError就能弹出你想要的提示了。
备注:内容来源于stack exchange,提问作者Jeremy Loh
相关产品推荐
相关产品推荐

