2010-12-15 111 views
1

我有包含其中的一個內有若干命名空間和多類項目 - >奇怪的C#命名空間問題

Some.Namepsace. (namespace) 
       ExistingClass (class) 
       ExistingClass2 (class) 
       Constants (class) 
         .Enum (enum) 

在這個項目中,我創建了一個類,但有一個不正確的命名空間,像這樣

namespace Some.Namespace.Some.Namespace 
{ 
    public class NewClass {} 
} 

現在Some.Namespace.ExistingClass無法解決參考Some.Namespace.Constants.Enum - 這似乎是在尋找Some.Namespace.Some.Namespace.Constants.Enum。

任何想法爲什麼? NewClass沒有引用任何東西,也沒有被任何東西引用,所以我沒有看到它的命名空間如何影響其他任何組件。我修復了NewClass的命名空間問題,並解決了它。

+0

你是說現在它可以工作,而你只是想知道它爲什麼發生,或者它仍然不能與固定的命名空間一起工作? – 2010-12-15 20:22:15

+0

現在工作,只是想知道爲什麼 – Dlongnecker 2010-12-15 20:30:23

+0

我很難理解你所描述的所有類型和名稱空間之間關係的文章。如果你只是給我們一些問題的迴應?代碼是什麼樣的? – 2010-12-15 21:48:25

回答

0

這必須與Visual Studio/csc中的C#嘗試解析引用的方式有關。這樣看來它是這樣的:相對於調用對象

  • 的命名空間

    • 看,如果沒有找到這樣的命名空間,嘗試查找參考,彷彿這是絕對

    在我的情況下,在我添加Some.Namespace.Some.Namespace.NewClass之前,當VS嘗試將Some.Namespace.ExistingClass的引用解析爲Some.Namespace.Constants.Enum時,它首先嚐試進行相對名稱空間查找(從ExistingClasse的Some.Namespace開始),未找到這樣的名稱空間。然後它嘗試絕對查找並找到它。

    在我加入Some.Namespace.Some.Namespace.NewClass之後,它找到了命名空間,注意到對象不在那裏,並決定停止搜索。

  • 5

    Some.Namespace.Some.Namespace類將盡力解決Some.Namespace.Constants.Enum 爲:Some.Namespace.Some.Namespace.Constants.Enum,不一些。 Namespace.Constants.Enum

    如果您試圖將枚舉引用爲:global :: Some.Namespace.Constants.Enum,它會起作用。

    +0

    很好的明確答案時,它總是很清楚,這並不能回答我最初混淆的問題。我清除了我的問題。 – Dlongnecker 2010-12-15 20:35:16