【发布时间】:2010-12-03 07:26:25
【问题描述】:
我的很多类都是不同类型的知名但无序对象的容器,例如容器可能如下所示:
public class Container
{
public A A { get; private set; }
public B B { get; private set; }
public C C { get; private set; }
public bool StoreIfKnown(object o)
{
// TODO...
}
}
因此,如果o 的类型为A,则应将其存储在A 属性中,在B 属性中键入B,依此类推。
在 F# 中,StoreIfKnown 方法可以编写如下(请原谅语法错误,我的 F# 不是很好而且很生锈):
match o with
| ?: A a -> A <- a; true
| ?: B b -> B <- b; true
| ?: C c -> C <- c; true
| _ -> false
但在 C# 中,唯一的方法似乎是相当冗长:
if (o is A)
{
this.A = (A)o;
return true;
}
if (o is B)
{
this.B = (B)o;
return true;
}
// etc.
return false;
我可以使用 as 关键字来避免更快但更冗长的测试/强制转换模式。
在 C# 中有什么优雅的方法可以做到这一点吗?
【问题讨论】:
-
我很震惊居然有人在使用 F#...
-
@pixelbobby:请注意,有 478 个 F# 问题,而 Haskell 有 409 个,Scala 有 382 个,Lisp 有 353 个,Erlang 有 305 个,OCaml 有 96 个。 F# 看起来是 SO 上最流行的函数式编程语言,这可能是由于 hubFS 社区和想要跳上函数式编程火车的 .NET 开发人员的交叉。
-
我不会说我使用 F#,我只是想了解它的功能。虽然我很想有一份工作,它是我使用的主要语言(假设适合目的)来提高我的技能!至少了解一些使用与您通常使用的语言不同的范例的语言的基础知识可以提高您的全面编程能力。
-
@pixelbobby:F# 已经被 Microsoft 用于 XBox 分析和许多金融集团的生产环境中!
-
@pixelbobby:我几乎所有的新代码都是用 F# 编写的。几个月后,我现在在 F# 中更快了。它只是一种更高效的数据处理语言。根据您编写的代码,您的里程可能会有所不同。甚至我的 C# 代码看起来也很实用。我可以确认,正如 stringer 指出的那样,许多金融集团在生产中使用它。
标签: c# casting f# guard-clause