1

これらの定義を以下で比較してください。2番目の定義の問題は何ですか?

同じ名前空間内の別の型の定義内で type1 を使用したいのですが、実際にはどのようにすればよいですか?

最初の定義:

namespace parent
{
    using type1 = Int16;

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

2番目の定義:

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>;
}
4

2 に答える 2

2

using ステートメントを宣言して、それらを同じブロック内で使用することはできません。たとえば、これを試してください:

using System;
using type1 = Int16;

namespace sibling
{
}

これにより、type1 宣言の Int16 が不明であるというエラーが表示されます。ただし、名前空間内に移動すると、すべて問題ありません。

于 2013-10-21T09:30:36.223 に答える
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>;
}

それが、C# でそのような定義が禁止されていた理由かもしれません。

ただし、OOP 手法を使用すると、コードの可読性をある程度高めることができます。たとえば、辞書は次のように定義できます。

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

    }

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

その後も、エイリアシングを使って創造的になる方法があります。:)

于 2013-10-21T09:28:59.067 に答える