Aşağıdaki kod parçasına bakalım ve hem MyAttribute
hem de test
işlevinin değiştirilemeyeceğini varsayalım.Enum değeri nasıl korunur
type MyAttribute() =
inherit Attribute()
let mutable prop = null
member this.Prop
with get(): obj = prop
and set(value) = prop <- value
type MyEnum =
| A = 1
| B = 2
[<My(Prop = MyEnum.B)>]
type MyClass = class
end
let test() =
let t = typeof<MyClass>
let a = t.GetCustomAttributes(false).[0] :?> MyAttribute
let e = a.Prop
Convert.ToString(e, Globalization.CultureInfo.CurrentCulture)
sanırım (herhangi bir yolu var mı enum türü hakkında bilgileri kaybolur ve öznitelik iletilen değerin sadece 2.
olduğunu test
dönüş B
ama 2. Oluşturulan IL kodu gösterir döndürür beklenebilir öznitelik değerindeki türü korumak için bazı öznitelikler olmalı? Nedir beklendiği gibi C# işlerinde daha ilginç eşdeğer kod
Eşdeğer C#:
class MyAttribute : Attribute
{
public object A { get; set; }
}
enum T { A,B,C }
[My(A = T.A)]
class MyClass
{ }
var a = typeof(MyClass).GetCustomAttributes(false)[0] as MyAttribute;
Convert.ToString(a.A, System.Globalization.CultureInfo.CurrentCulture)
gerçekleştirerek düzeltebilirsiniz. Bahsedilen C# kod eşdeğerini paylaşabilir misiniz? – MarcinJuraszek
@MarcinJuraszek: düzenlenmiş – Novakov
'GetCustomAttributes()' 'false 'ile F # ve' true' C#; Bunun ne olduğundan emin değil, ama en azından bir fark. – TeaDrivenDev