У меня есть пространство имен в проекте с ссылкой, Project.Base
, и кто-то подумал, что было бы неплохо объявить свой собственный общий класс List в этом пространстве имен.Почему использование пространств имен работает неинтуитивно?
Теперь у меня есть файл с кодом, который начинается:
using System.Collections.Generic;
using Project.Base.Sub;
Project.Base
имен никогда на самом деле формально используется; просто вложенное пространство имен внутри него. System.Collections.Generic
есть формально б/у. Но по какой-то причудливой причине, когда я объявляю метод, тип возврата которого равен List<T>
, он интерпретирует это как Project.Base.List<T>
, а не System.Collections.Generic.List<T>
!
Это кажется невероятно противоречивым для меня. Кто-нибудь знает, что происходит и как это исправить?
EDIT Для воспроизведения:
using System;
using System.Collections.Generic;
using Project.Base.Sub;
namespace Project.Base
{
public class List<T> { }
}
namespace Project.Base.Sub { }
namespace Project.Base.Sub2
{
public class P
{
public static void Main()
{
var list = new List<int>();
Console.WriteLine(list.GetType().Namespace);
Console.Read();
}
}
}
(. Обратите внимание, что код в вопрос находится в другом суб-пространстве имен Project.Base Это представляется значительным.)
Не могли бы вы разместить код для пространства имен Project.Base.Sub? Или, по крайней мере, начало –
В каком пространстве имен существует код, который ссылается на «Список»? –
'имен Project.Base { \t Список общественного класса {}} имен Project.Base.Sub {} имен Foo { \t с использованием System.Collections.Generic; \t using Project.Base.Sub; \t \t общественного класса P \t { \t \t государственной статической силы Main() \t \t {список \t \t \t вар = новый список (); \t \t \t System.Console.WriteLine (list.GetType(). Пространство имен); \t \t} \t} } 'Ваша заявленная проблема не может быть воспроизведена. ** Почтовый код, который фактически воспроизводит проблему **. –