'नाम स्थान' लेकिन एक 'प्रकार' की तरह प्रयोग किया जाता है


87

यह मेरा प्रोग्राम है जो कक्षा का उपयोग करता है उसे टाइम 2 कहा जाता है। मेरे पास टाइमटेस्ट में जोड़ा गया संदर्भ है जो मुझे प्राप्त होता रहता है त्रुटि 'टाइम 2' एक 'नाम स्थान' है लेकिन इसका उपयोग 'प्रकार' की तरह किया जाता है

क्या कोई मुझे बता सकता है कि यह त्रुटि क्या है और इसे कैसे ठीक किया जाए?

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}

8
आपके पास TimeTest.TimeTest (और अन्य लोग इसे पसंद करते हैं) टाइप करते हैं। ऐसा मत करो। एक प्रकार का नाम उसके नामस्थान के समान न रखें, आप अस्पष्टता त्रुटियाँ पैदा करते हैं।
एंथनी Pegram

अधिक जानकारी के लिए, देखें: blogs.msdn.com/b/ericlippert/archive/2010/03/09/09/…
एंथनी

1
आपको वास्तव में Time2इस प्रश्न की घोषणा को (छीन लिया गया) जोड़ना चाहिए , क्योंकि शायद यही समस्या है। सबसे अधिक संभावना है कि आपको Time2एक नामस्थान में परिभाषित किया गया हैTime2
जेरकीबॉल

1
TheAce, कृपया अगली बार न्यूनतम नमूना प्रदान करने का प्रयास करें जो समस्या को पुन: पेश करता है। मैंने उन पंक्तियों को हटा दिया है जो आवश्यक नहीं हैं, कृपया इसे पूरा करने के लिए Time2 परिभाषा जोड़ें।
अलेक्सई लेवेनकोव

जवाबों:


126

मुझे संदेह है कि आपको कम से कम दो बार एक ही समस्या मिली है ।

यहाँ:

namespace TimeTest
{
    class TimeTest
    {
}

... आप एक ही नाम के साथ एक प्रकार की घोषणा कर रहे हैं जैसा कि नामस्थान में है। ऐसा मत करो।

अब आप स्पष्ट रूप से के साथ एक ही समस्या है Time2। मुझे संदेह है अगर आप जोड़ते हैं:

using Time2;

आपके usingनिर्देशों की सूची के लिए , आपका कोड संकलन करेगा। लेकिन कृपया, कृपया, कृपया बड़ी समस्या को ठीक करें: नामों की समस्याग्रस्त पसंद। ( यह एक बुरा विचार क्यों है के अधिक विवरण जानने के लिए ऊपर दिए गए लिंक का पालन करें ।)

(इसके अतिरिक्त, जब तक आप वास्तव में समय-आधारित प्रकार लिखने में रुचि नहीं रखते हैं, मैं आपको ऐसा नहीं करने की सलाह दूंगा ... और मैं कहता हूं कि जैसा कोई व्यक्ति ठीक वैसा ही करता है। अंतर्निहित क्षमताओं का उपयोग करें, या एक तिहाई। पार्टी लाइब्रेरी जैसे, उम, मेरा । सही ढंग से तारीखों और समय के साथ काम करना आश्चर्यजनक रूप से बालों वाला है। :)


1
मैंने नाम स्थान का नाम बदल दिया और समस्या को ठीक कर दिया। यह वास्तव में अजीब है क्योंकि यह VS2019 द्वारा उत्पन्न डिफ़ॉल्ट कोड है।
टिम मेल्टन

1
@TimMelton: यदि आपने नाम स्थान टाइमटेस्ट को चुना है तो यह डिफ़ॉल्ट होगा और तब क्लास का नाम टाइमटेस्ट भी चुना। आपको दोनों को समान चुनना होगा ...
जॉन स्कीट

मुझे अब समस्या दिख रही है। मैं जो वीडियो देख रहा था, उसने मुझे कंट्रोलर फ़ाइलों को डालने के लिए कंट्रोलर नाम का एक फोल्डर बनाया था। यह वह जगह है जहाँ से नेमस्पेस में कंट्रोलर आया था। वीएस ऑटो नामस्थान पर फ़ोल्डर का नाम जोड़ता है। Namespace के बाद कंट्रोलर शब्द हटाने से समस्या ठीक हो जाती है।
टिम मेल्टन

यह तय हो गया! धन्यवाद। कभी-कभी विज़ुअल स्टूडियो कुछ भ्रामक त्रुटि संदेश प्रदर्शित करता है जो निराशाजनक हो सकते हैं।
TheITvideos

मेरे मामले में मैं किसी तरह एक पुरानी लाइब्रेरी के संदर्भ में खींचने में कामयाब रहा, जिसमें इस अतिव्यापी नाम की समस्या थी जो मुझे लगा कि मैंने सालों पहले आग से मार दिया था।
वाइल्डकैट मैट

19
namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}

नेमस्पेस से कंट्रोलर शब्द को हटा दें


इसका जवाब नहीं के रूप में चिह्नित किया गया था, मैंने इसे तब संपादित किया जब मैंने सवाल नहीं पढ़ा
Danh

1
जब आप Microsoft.AspNetCore.Mvc नामस्थान में नियंत्रक वर्ग से इनहेरिट करने का प्रयास करते हैं, यदि आपके फ़ोल्डर को नियंत्रक नहीं कहा जाता है, और नियंत्रक "s" नहीं है, तो आपके पास अंतिम नाम स्थान है क्योंकि नियंत्रक नाम के कारण नियंत्रक wich एक त्रुटि फेंकता है। यह उत्तर सही है और मुझे यह देखने में मदद मिली कि मैंने अपने प्रोजेक्ट में फ़ोल्डर नियंत्रकों को गलत नाम दिया है।
एलिक गाइडोलिन

इससे मेरी समस्या ठीक हो गई। बहुत स्पष्ट उत्तर के लिए धन्यवाद!
कार्थक्स

2

यदि आप एक बड़े ऐप पर काम कर रहे हैं और किसी भी नाम को नहीं बदल सकते हैं, तो आप नाम टाइप .से इच्छित प्रकार का चयन करने के लिए टाइप कर सकते हैं:

namespace Company.Core.Context{
  public partial class Context : Database Context {
    ...
  }
}
...

using Company.Core.Context;
someFunction(){
 var c = new Context.Context();
}

1

मुझे यह समस्या हुई क्योंकि मैंने "प्रतिक्रिया" नामक एक फ़ोल्डर के अंदर एक वर्ग "Response.cs" बनाया। इसलिए वीएस new Response ()फोल्डर / नेमस्पेस के रूप में पकड़ रहा था ।

इसलिए मैंने क्लास का नाम बदलकर StatusResponse.cs रखा और कॉल किया new StatusResponse()। इस मुद्दे को हल किया।


1

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

आप सभी पंक्तियों को प्राप्त कर सकते हैं जो निम्नलिखित regex का उपयोग करके परियोजना / समाधान में खोज करके समस्या पैदा करते हैं:

namespace .+\.TheNameUsedAsBothNamespaceAndType

0

कृपया जाँचें कि आपका वर्ग और नाम स्थान एक ही है ...

यह तब होता है जब नाम और वर्ग का नाम समान होता है। जब आप नेमस्पेस का उपयोग करना चाहते हैं तो एक नाम नेमस्पेस का पूरा नाम लिखें।

using Student.Models.Db;

namespace Student.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            List<Student> student = null;
            return View();
        }
    }

-3

अगर त्रुटि है

लाइन 26:
लाइन 27: @foreach (मॉडल में ग्राहक ग्राहक) लाइन 28: {लाइन 29:


@foreach की तरह पूरा नाम स्पेस दें (Start.Models.customer ग्राहक मॉडल में)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.