2011-12-23 22 views
6

मैं सी # में enums साथ परेशानी हो रही हूँमेरे सी # एनम्स क्यों काम नहीं कर रहे हैं?

मैं यहाँ एक enum है:

using Project.Shared; 
namespace Project.Shared.FooNamespace 
{ 
    public class Foo 
    { 
     public int CostType { get; set; } 

     public Foo() 
     { 

      CostType = (int)CostType.Dollars; // <--- error syntax highlighting on 'Dollars' 
     } 
    } 
} 

इस में जो परिणाम:

namespace Project.Shared 
{ 
    public enum CostType 
    { 
     Dollars, 
     Percent 
    } 
} 

मैं एक वस्तु है कि enum यहाँ उपयोग करने के लिए कोशिश कर रहा है है एक त्रुटि:

'int' does not contain a definition for 'Dollars' and no extension method 'Dollars' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)

मुझे समझ में नहीं आता कि मैं एम का उपयोग क्यों नहीं कर सकता वाई एनम वहाँ। क्या कोई मुझे यह समझाने में मदद कर सकता है?

+6

यह एक संकेत हो सकता है कि आपको संपत्ति के लिए enum के लिए समान नाम का उपयोग नहीं करना चाहिए। –

+1

यदि आप enum प्राप्त कर चुके हैं और आप enum मान चाहते हैं तो आप मूल्य को int के रूप में क्यों स्टोर करना चाहते हैं? – WestDiscGolf

+0

क्योंकि EntityFramework अभी तक एम्स को मैपिंग का समर्थन नहीं करता है। – quakkels

उत्तर

16

क्योंकि आपकी कक्षा Foo में यह परिभाषा है - public int CostType { get; set; } - जिसमें आपके enum से अधिक स्थानीय दायरा है।

पूरी तरह से अपने नाम स्थान के साथ यह योग्यता कोशिश:

CostType = (int)Project.Shared.CostType.Dollars; 
+1

इसके अतिरिक्त, मैं 'CostType' की अस्पष्टता में सहायता के लिए 'this.CostType =' करूँगा। –

+0

@ एरिक फिलिप्स +1 मैं तुम्हारे साथ हूं। यद्यपि बहुत सारे लोग कोड में 'इस' क्वालीफायर को देखकर * तुच्छ * लगते हैं ... – Yuck

+1

मदद के लिए धन्यवाद ... यह हल हो गया। मेरी क्रिसमस – quakkels

1

आप संघर्ष नामकरण किया है। आपने नाम CostType नाम दिया है जो enum नाम के समान है। इस तरह सी # यह मान रहा है कि CostTypeFoo() विधि दोनों संदर्भ संपत्ति का संदर्भ दे रहे हैं और न कि enum।

आप इस कोशिश कर सकते:

CostType = (int)Project.Shared.CostType.Dollars; 
1

समस्या यह है कि CostType = (int)CostType.Dollars; में CostType दोनों आवृत्तियां चर का उल्लेख है। और परिवर्तनीय CostType में Dollars नामक कोई संपत्ति नहीं है। प्रकार को स्पष्ट रूप से संदर्भित करने के लिए Project.Shared.CostType प्रकार को संदर्भित करने के लिए नामस्थान को शामिल करें, चर नहीं।

1

इस के लिए यह परिवर्तन और यह काम करना चाहिए

public enum CostType 
{ 
    Dollars, 
    Percent 
} 

public class Foo 
{   
    public int CostTypes { get; set; } 
    public Foo() 
    { 
     CostTypes = (int)CostType.Dollars; 
     // <--- error syntax highlighting on 'Dollars' 
    } 
} 

मैं अपने ऑटो संपत्ति एक ही नाम मेरी enum CostType रूप में मैं इस परीक्षण किया है और क्या मैं संकलन किया था और काम

+3

इस संपत्ति का नामकरण 'कॉस्टटाइप' का कोई मतलब नहीं है। यह झंडे enum नहीं है, और इस प्रकार केवल एक 'CostType' का प्रतिनिधित्व कर सकते हैं। तो आप बहुवचन का उपयोग क्यों कर रहे हैं? – CodesInChaos

+0

मैंने अपने प्रश्न के रूप में एक समस्या मुद्दा या संकलन समस्या के रूप में देखा, यदि ऐसा है तो उसके पास नामस्थानों को या तो – MethodMan

+0

@ डीजे क्राज़ - प्रति यक का जवाब मिलना चाहिए, अब मैं – quakkels

12

के रूप में तैनात किया है का नाम नहीं होगा दूसरों ने इंगित किया है कि संपत्ति इस प्रकार की तुलना में "करीब" है, और इसलिए जब सरल नाम हल हो जाता है, तो संपत्ति हमेशा जीत जाती है।

इस स्थिति पर एक दिलचस्प झुर्रियां हालांकि है यदि आपने int की बजाय कॉस्टटाइप प्रकार की संपत्ति बनाई है, तो यह काम करता।

इसका कारण यह है कि सी # के पास उस स्थिति के लिए एक विशेष नियम है, जिसे आमतौर पर "रंगीन रंग" नियम कहा जाता है। (क्योंकि वह स्थिति है जिसमें यह सबसे अधिक पैदा होती है:। एक प्रकार का रंग नाम और एक संपत्ति के प्रकार के रंग रंग कहा जाता है)

एक साधारण नाम दोनों एक प्रकार और अर्थ हो सकता है अगर एक संपत्ति या क्षेत्र उस के साथ उस प्रकार का नाम, फिर सी # आपको संपत्ति के माध्यम से और इंस्टेंस सदस्यों के माध्यम से स्थिर सदस्यों तक पहुंचने की अनुमति देता है।यह आप की तरह काम करने के लिए अनुमति देता है:

Color = Color.Red; 
description = Color.ToString(); 

पहले और तीसरे रंग संपत्ति के लिए संदर्भ कर रहे हैं; दूसरा प्रकार का संदर्भ है।

+1

+1 नया सीखा आज –

+0

+1 बहुत रोचक, या तो यह नहीं पता था। – Yuck

0

मैंने हल किया: 'विजुअल स्टूडियो को पुनरारंभ करके' ENUM में VALUE की परिभाषा नहीं है) त्रुटि। बस अगर किसी को भी एक ही समस्या है।

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