2013-10-21 164 views
1

請比較下面的這些定義。第二個定義有什麼問題?類型別名(「使用」)在相同與分層名稱空間

我想在同一個命名空間中的另一個類型的定義中使用type1,我應該怎麼做呢?

1定義:

namespace parent 
{ 
    using type1 = Int16; 

    namespace child 
    { 
    using list1 = List<type1>; //OK! 
    } 
} 

第二個定義:

namespace sibling 
{ 
    using type1 = Int16; 
    using list1 = List<type1>; //error: the type or namespace 'type1' could not be found. 
} 

編輯:

using type1 = Int16; 
using list1 = List<type1>; //error: the type or namespace 'type1' could not be found 

namespace myNameSpace 
{ 
    using dic1 = Dictionary <int, list1>; 
} 
+0

正如「EDIT」部分所建議的,請不要將使用場景限制爲兩種類型別名,例如第三個別名也可能需要引用第二個別名(本例中爲dic1) –

回答

0
using type1 = Int16; 
namespace sibling 
{ 

    using list1 = List<type1>; 
} 

繼續在節點中回答你的問題... 我真的不確定這樣的別名會獲得更好的代碼可讀性。所以假設你有以下情況。

namespace a 
{ 
    using type1 = int16; 
    namespace b 
    { 
      using list1 = List<int16> 
      namespace c 
      { 
       var dictionary1 = Dictionary<type1, list1> 
      } 
    } 
    using list1 = List<object>; 
} 

誰知道,這可能是這樣的defs在C#中被禁止的原因。

但是一些代碼的可讀性仍然可以通過OOP方法來實現。所以例如你的字典可以通過以下方式定義。

public class MyDictionary<T> : Dictionary<T, List<T>> 
    { 

    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var test = new MyDictionary<int>(); 
     } 
    } 

之後仍然有一種創造性的方式來處理別名。 :)

+0

這種類型的父代-child父級是「全局」級別的命名空間。假設我現在想要引入基於list1的另一種類型,我會遇到同樣的問題,例如: using dic1 = Dictionary

+0

你能分享一下你的想法嗎?你爲什麼需要這個?這可能會發生,有可能是另一種方式爲這樣的事... –

+0

我想避免可讀性差的代碼,如: var x = new Dictionary >,我想給這個類型一個有意義的名字 –

2

您不能聲明使用語句並在同一個塊中使用它們。例如,試試這個:

using System; 
using type1 = Int16; 

namespace sibling 
{ 
} 

這會給你一個錯誤,說明Int16對於type1聲明是未知的。把它移到名字空間裏面,一切都會好起來的。

相關問題