EDYCJA: Dodano bardziej kompletny przykład, który wyjaśnił problem.Atrybuty F #, typeof i "To nie jest wyrażenie stałe"
Niektóre atrybuty .NET wymagają parametru typu Type
. Jak deklarować te parametry w F #?
Na przykład w C# możemy to zrobić:
[XmlInclude(typeof(Car))]
[XmlInclude(typeof(Truck))]
class Vehicle { }
class Car : Vehicle { }
class Truck : Vehicle { }
Ale w F # Po ...
[<XmlInclude(typeof<Car>)>]
[<XmlInclude(typeof<Truck>)>]
type Vehicle() = class end
type Car() = inherit Vehicle()
type Truck() = inherit Car()
... powoduje błąd kompilatora: To nie jest stałe wyrażenie lub poprawna wartość niestandardowego atrybutu.
Dziękujemy za potwierdzenie, że to * powinno * działać. Kiedy próbowałem utworzyć dla ciebie przykład testowy, stwierdziłem, że problem nie dotyczy używania ** typeof <...> ** w atrybucie. Problem polegał na tym, że klasy ** Car ** i ** Truck ** są zdefiniowane * po * klasie bazowej. – Wally
@Wally W takim przypadku możesz potrzebować 'type ... i ...' do zdefiniowania typów rekursywnych (które widzą się nawzajem). –