C# 默认关键字在 F# 中的等效项是啥?

Posted

技术标签:

【中文标题】C# 默认关键字在 F# 中的等效项是啥?【英文标题】:What is the equivalent in F# of the C# default keyword?C# 默认关键字在 F# 中的等效项是什么? 【发布时间】:2011-01-15 19:34:18 【问题描述】:

我正在寻找相当于 C# default 关键字,例如:

public T GetNext()

    T temp = default(T);
            ...

谢谢

【问题讨论】:

【参考方案1】:

我在博客中找到了这个:“What does this C# code look like in F#? (part one: expressions and statements)”

C# 有一个名为“default”的运算符 返回零初始化 给定类型的值:

default(int) 

它的效用有限;最常见的你可以使用 泛型中的默认(T)。 F# 有一个 与图书馆相似的结构 功能:

Unchecked.defaultof<int>

【讨论】:

【参考方案2】:

从技术上讲,F# 函数 Unchecked.defaultof&lt;'a&gt; 等效于 C# 中的 default 运算符。但是,我认为值得注意的是,defaultof 在 F# 中被认为是 不安全 的东西,应该只在真正需要时才使用(就像使用 null,在F#)。

在大多数情况下,您可以通过使用 option&lt;'a&gt; 类型来避免使用 defaultof。它允许您表示一个值尚不可用的事实。

但是,这里有一个简短的例子来展示这个想法。以下 C# 代码:

    T temp = default(T);
    // Code that may call: temp = foo()
    if (temp == default(T)) temp = bar(arg)
    return temp;

在 F# 中可能会这样写(使用命令式功能):

    let temp = ref None
    // Code that may call: temp := Some(foo())
    match !temp with 
    | None -> bar(arg)
    | Some(temp) -> temp

当然,这取决于您的具体情况,在某些情况下,defaultof 是您唯一可以做的事情。不过,我只想指出,defaultof 在 F# 中的使用频率较低。

【讨论】:

在您的 C# 示例中,您在 if 语句中使用赋值运算符而不是相等运算符。这是故意的吗? 我应该说它对我不起作用,让 t = ref None t := Some(context.Items.FirstOrDefault(fun ii -> ii.Name = i.Name)) 匹配!与 |一些它 -> - 在这里完成,即使它是空的 |无 -> 忽略 @MartinBodocky 您的代码将始终返回Some(_)。它返回 Some(value)Some(defaultof&lt;&gt;) 两者都将匹配匹配表达式中的 Some _ 大小写。您可以使用context.Items |&gt; Seq.tryFind(fun II -&gt; ii.Name = i.Name),然后匹配表达式将按您的预期工作

以上是关于C# 默认关键字在 F# 中的等效项是啥?的主要内容,如果未能解决你的问题,请参考以下文章

MAKEWORD c++ Windows 宏的 C# 等效项是啥?

case/switch 语句的 Python 等效项是啥? [复制]

Linux Shell 中的 ` +` 的 Windows 等效项是啥?

Imagick PHP Gif 优化中的模糊等效项是啥?

SQL Server 2008 中的 SQL Server 2008 R2 中的 dm_os_volume_stats 等效项是啥?

此 Access 查询的 MS SQL 等效项是啥?