如何使用编译器推断静态成员的类型?
在C#6.0中,编译器可以通过提供"using static <namespace>.<class>"
指令来推断静态属性或方法的类型。
因此,我想尽可能少编写代码。
我有以下静态成员:
module Mock
type Profile() =
static member SomeUserName = "some_user_name"
static member SomePassword = "some_password"
然后我定义了一些类型和功能:
open Mock
(*Types*)
type User = User of string
type Password = Password of string
type Credentials = { User:User; Password:Password }
(*Functions*)
let login credentials =
false
然后我进行了以下测试:
[<Test>]
let ``sign in`` () =
// Setup
let credentials = { User= User Profile.SomeUserName
Password= Password Profile.SomePassword }
// Test
credentials |> login
|> should equal true
我想从SomeUserName和SomePassword中删除配置文件类型限定符,而是执行此操作:
// Setup
let credentials = { User= User SomeUserName
Password= Password SomePassword }
我是否必须明确指定静态成员的类型?
答案 0 :(得分:5)
正如Fyodor Soikin指出的那样,显而易见的解决方案就是简单地将Profile
作为一个模块。
module Profile =
let someUserName = "some_user_name"
let somePassword = "some_password"
然后你可以:
open Profile
let credentials = {
User = User someUserName;
Password = Password somePassword
}
顺便说一下,虽然目前可能无法在F#中打开静态类,但在未来的版本中看起来会发生变化 - 此功能已经“原则上批准”。有关详情,请参阅user voice item。