加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在F#中写这个C#代码

发布时间:2020-12-15 06:44:12 所属栏目:百科 来源:网络整理
导读:我习惯在C#中编写这样的代码: SomeObj obj;try{ // this may throw SomeException obj = GetSomeObj();}catch(SomeException){ // Log error... obj = GetSomeDefaultValue();}obj.DoSomething(); 这是我在F#中翻译的方式(obj是一个列表): let mutable obj
我习惯在C#中编写这样的代码:
SomeObj obj;
try{
    // this may throw SomeException
    obj = GetSomeObj();
}catch(SomeException){
    // Log error...
    obj = GetSomeDefaultValue();
}

obj.DoSomething();

这是我在F#中翻译的方式(obj是一个列表):

let mutable obj = []
try
    obj <- getSomeObj
with
    | ex ->
        // Log ex
        obj <- getSomeDefaultValue

doSomething obj

在F#中没有使用可变变量有什么办法吗?在F#中是否有更优雅的方式来处理这种情况?

谢谢!

解决方法

F#-ish方式是在两个分支中返回相同类型的表达式:
let obj =
    try
        getSomeObj()
    with
    | ex ->
        // Log ex
        getSomeDefaultValue()

doSomething obj

在F#中,可以使用选项类型来处理异常.当没有明显的默认值时,这是一个优点,编译器会强制您处理异常情况.

let objOpt =
    try
        Some(getSomeObj())
    with
    | ex ->
        // Log ex
        None

match objOpt with
| Some obj -> doSomething obj
| None -> (* Do something else *)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读