2010-11-11 136 views
1

好吧,我有一個名爲BusinessLayer的C#項目,它生成名爲BusinessLayer的程序集,名稱空間是BusinessLayer。愚蠢的命名空間問題

在這個項目裏面,我使用文件夾來存儲代碼。一個文件夾稱爲FilterElements,它具有名爲FilterKeyReversal,FilterRandom和FilterToday的文件夾。

讓我們以FilterRandom文件夾爲例。它有一個名爲LessThan10DaysGreaterThan50A的類,其名稱空間爲BusinessLayer.FilterElements.FilterRandom和一個名爲RunFilter()的公共靜態方法;

在使用此方法的網站頁面後面的代碼中,我使用了使用BusinessLayer的語句。我還有另一個使用語句,使用BusinessLayer.FilterElements。

我倒覺得,露出LessThan10DaysGreaterThan50A類的RunFilter()方法,我可以使用下面的語法:FilterRandom.LessThan10DaysGreaterThan50A.RunFilter(),但我得到以下錯誤:名稱FilterRandom不在存在當前上下文。

如果我使用下面的語法內聯,錯誤消失:BusinessLayer.FilterElements.FilterRandom.LessThan10DaysGreaterThan50A.RunFilter(),或者如果我使用using語句:使用BusinessLayer.FilterElements.FilterRandom,語法如下工作: LessThan10DaysGreaterThan50A.RunFilter()。

我寧願使用FilterRandom.LessThan10DaysGreaterThan50A.RunFilter(),因爲它似乎使代碼更具可讀性。如果我使用以下使用FilterRandom = BusinessLayer.FilterElements.FilterRandom語法的別名,我可以得到我想要的,但不太喜歡使用別名的想法,因爲它可能導致混淆。

我認爲既然我的BusinessLayer命名空間具有嵌套命名空間,我可以拿起剩餘的命名空間,但我似乎無法讓它工作。任何人都知道如何在不使用別名的情況下完成這項工作,或者我每次都必須使用整個名稱空間名稱?

謝謝。

+2

這適用於VB.NET,但不適用於C#。別名就是你所擁有的。 – 2010-11-11 18:58:17

+0

我第二@Hans - 前幾天遇到了這個問題,我自己。順便說一句,爲什麼有一個類被鎖定到一個高度特定的業務規則(少於10天等),而不是隻實現一個可以在任意日期範圍內運行的過濾器? – 2010-11-11 18:59:42

+0

如何嵌套內部類而不是命名空間?或者像FilterRandom.FilterLessThan10DaysGraterThan50A()代替。 – mellamokb 2010-11-11 19:01:53

回答

1

不,它不。我知道這很刺激。

我第一次嘗試解決這個問題(我有同樣的問題)是將這些usings:

using FilterRandom = BusinessLayer.FilterElements.FilterRandom; 

這個問題就變成,你必須添加一個要包括的每個子命名空間,這變得一團糟。

我如何永久解決這個問題是通過更改項目中的命名空間,以便在例如FilterRandom將例如,在BusinessLayer

你實際看到的問題是你有太多的命名空間。這並不奇怪。他們是組織你的代碼和類的好方法,並不難使它失去控制。我的意思是通過改變命名空間,我將許多小命名空間合併爲更大的命名空間。這有時意味着重命名類,但我認爲類名本身應該是有意義的,沒有名稱空間前綴。

這樣,我永久性地解決了我的項目(60kloc)中的這些問題,結果非常好。

+0

彼得,謝謝,但我將遠離使用別名。對於維護人員來說可能太困難了。 RandomFilter實際上在BusinessLayer項目中。你的意思是使用嵌套類嗎? – MikeMalter 2010-11-11 20:56:36

+0

@MikeMalter - 擴大了答案。 – 2010-11-11 21:55:17