के कोड का निम्न भाग को देखो और लगता है कि दोनों MyAttribute
और test
समारोह बदला नहीं जा सकता हैं।enum में मान प्रकार संरक्षित करने के लिए कैसे
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)
मुझे लगता है कि test
वापसी B
लेकिन यह रिटर्न 2. जनरेट किया आईएल कोड पता चलता है कि enum प्रकार के बारे में जानकारी खो जाती है और विशेषता को भेजे गए मान सिर्फ 2.
है उम्मीद करेंगे वहाँ कोई तरीका है (मुझे लगता है कि यह विशेषता विशेषता में टाइप संरक्षित करने के लिए कुछ विशेषता होनी चाहिए? क्या सी # कार्यों में और अधिक दिलचस्प बराबर कोड अपेक्षित ढंग से
समतुल्य सी #:
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)
कर कर इसे ठीक कर सकते हैं क्या आप उल्लेख किए गए समकक्ष सी # कोड साझा कर सकते हैं? – MarcinJuraszek
@MarcinJuraszek: संपादित – Novakov
आप 'कॉल कर रहे हैं GetCustomAttributes()' 'सी # में एफ # में FALSE' और' TRUE' के साथ; सुनिश्चित नहीं है कि यह क्या करता है, लेकिन कम से कम यह एक अंतर है। – TeaDrivenDev