TL; DR: F # derleyici determined by Eugene Fotin ve expanded upon by Gene Belitski olarak, int
operator olarak bu bağlamda int
yorumlar. En iyi çözüm, System.Int32.MaxValue
veya aşağıda açıklandığı gibi benzersiz bir tür takma ad kullanmaktır.F # int.MaxValue, "geçerli bir sabit ifade değil", ancak System.Int32.MaxValue nedir?
aşağıdaki kayıt türünü düşünün:
type User = {
Username : string
}
Ben Username
uzun en az üç karakter olmak istiyorum, bu yüzden StringLength
özniteliğini kullanın. Hiçbir maksimum uzunluk, bu yüzden int.MaxValue
ayarlayın: Bunun yerine System.Int32
kullanırsanız
This is not a valid constant expression or custom attribute value.
Herşey şeftali olduğunu:
type User = {
[<StringLength(int.MaxValue, MinimumLength=3)>]
Username : string
}
Bu bana aşağıdaki hatayı veriyor
type User = {
[<StringLength(System.Int32.MaxValue, MinimumLength=3)>]
Username : string
}
Aynı zamanda ben int
:
Veya tam tipini nitelemek:
type User = {
[<StringLength(Microsoft.FSharp.Core.int.MaxValue, MinimumLength=3)>]
Username : string
}
Ben F # kaynak ve int
is defined exactly as you would expect kontrol:
type int32 = System.Int32
// Then, a few lines later…
type int = int32
Neler oluyor? F # ilkel türlerinin çoğu bağlamda diğer türlerle birbiriyle değiştirilebilir olduğunu varsaydım, ama zihinsel modelimden bir şey eksik gibi görünüyor.
Haklısınız, işte olan bu. Merak ediyorum neden bu? F # grammarındaki bir şey, sanırım? –