2009-02-03 6 views
63

मैं दशमलव मानों को फ़ील्ड विशेषता के लिए पैराम के रूप में उपयोग करने का प्रयास कर रहा हूं लेकिन मुझे एक कंपाइलर त्रुटि मिलती है।सी # में विशेषता पैरा के रूप में दशमलव मान का उपयोग करें?

मुझे यह ब्लॉग पोस्ट link मिला है, यह कह रहा है कि नेट में उपयोग करना संभव नहीं था, क्या किसी को पता है कि वे इसे क्यों चुनते हैं या मैं दशमलव पैरा का उपयोग कैसे कर सकता हूं?

धन्यवाद।

उत्तर

92

यह एक सीएलआर प्रतिबंध है। केवल आदिम स्थिरांक या प्राइमेटिव के सरणी गुण पैरामीटर के रूप में उपयोग किया जा सकता है। इसका कारण यह है कि एक विशेषता मेटाडेटा में पूरी तरह से एन्कोड किया जाना चाहिए। यह एक विधि निकाय से अलग है जो आईएल में कोडित है। मेटाडेटा का उपयोग केवल मूल्यों के दायरे को गंभीर रूप से प्रतिबंधित करता है जिनका उपयोग किया जा सकता है। सीएलआर के वर्तमान संस्करण में, मेटाडेटा मान प्राइमेटिव, शून्य, प्रकार और प्राइमेटिव के सरणी तक सीमित हैं (शायद एक मामूली चूक गए हों)।

दशमलव जैसे मूल प्रकार एक आदिम प्रकार नहीं हैं और इसलिए मेटाडेटा में इसका प्रतिनिधित्व नहीं किया जा सकता है जो इसे एक विशेषता पैरामीटर होने से रोकता है।

+0

धन्यवाद, मैंने सोचा था कि दशमलव एक प्राचीन प्रकार था :-) – rjlopes

+2

क्या यह अभी भी फ्रेमवर्क 4.0 के साथ एक मुद्दा है? और 4.5, 4.6.x? – midspace

+0

@ मिडस्पेस, वास्तव में एक मुद्दा नहीं, केवल एक सीमा, डिजाइन द्वारा लगाया गया। यह दुर्भाग्यपूर्ण है, लेकिन अच्छी संभावना है कि यह कभी नहीं चलेगा। –

1

गुणों के साथ रीयलटाइम चाल के लिए मैं TypeConverter कक्षा का उपयोग कर रहा हूं।

2

जब मैं इस स्थिति में भाग लेता हूं, तो मैंने गुण पर संपत्तियों को डबल के रूप में उजागर कर दिया, लेकिन विशेषता के अंदर उन्हें दशमलव के रूप में माना जाता था। बिल्कुल सही से, लेकिन साधारण मामलों के लिए, यह सिर्फ वही हो सकता है जो आपको चाहिए।

0

आप निम्न कन्स्ट्रक्टर का उपयोग कर सकते हैं। जब आपके पास सी # कोड में दशमलव अक्षर होता है, तो सी # कंपाइलर इस कन्स्ट्रक्टर को कॉल करता है।

Decimal(Int32, Int32, Int32, Boolean, Byte)

संपादित करें: मैं जानता हूँ कि यह सुविधाजनक नहीं है।

+1

यदि यह किसी विशेषता में काम करता है, तो मैं बस "एम" प्रत्यय का उपयोग करके अनुमान लगा रहा हूं, लेकिन न तो करता है (सिस्टम का उपयोग करना। कॉम्पोनेंट मॉडेल.डिफॉल्ट वैल्यूएट्रिब्यूट मेरे परीक्षण के रूप में) – xr280xr

13

मुझे एक ही समस्या है। मैं तार का उपयोग करने पर विचार करता हूं। यह टाइप-सुरक्षित नहीं है, लेकिन यह पठनीय है और मुझे लगता है कि हम तारों में वैध संख्याएं लिखने में सक्षम होंगे :-)।

class BlahAttribute : Attribute 
{ 
    private decimal value; 

    BlahAttribute(string number) 
    { 
    value = decimal.Parse(number, CultureInfo.InvariantCulture); 
    } 
} 

[Blah("10.23")] 
class Foo {} 

यह एक सुंदरता नहीं है, लेकिन सभी विकल्पों पर विचार करने के बाद, यह काफी अच्छा है।

+1

ऐसा लगता है कि mbUnit http: // vkreynin copes कैसे करता है। wordpress.com/2007/05/25/mbunit-24-rtm-now-you-can-use-decimals-in-row-attributes/ –

संबंधित मुद्दे