121 votes

espace de noms" mais est utilisé comme un "type".

Mon programme utilise une classe appelée Time2 . J'ai ajouté la référence à TimeTest mais je continue à obtenir l'erreur, 'Time2' is a 'namespace' but is used like a 'type' .

Quelqu'un pourrait-il me dire ce qu'est cette erreur et comment la réparer ?

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}

174voto

Jon Skeet Points 692016

Je pense que vous avez le même problème au moins deux fois .

Ici :

namespace TimeTest
{
    class TimeTest
    {
}

... vous déclarez un type avec le même nom que l'espace de nom dans lequel il se trouve. Ne fais pas ça.

Maintenant, vous avez apparemment le même problème avec Time2 . I suspect si vous ajoutez :

using Time2;

à votre liste de using votre code sera compilé. Mais s'il vous plaît, s'il vous plaît, s'il vous plaît, réparez le plus gros problème : le choix problématique des noms. (Suivez le lien ci-dessus pour découvrir les détails de pourquoi c'est une mauvaise idée).

(En outre, à moins que vous ne soyez vraiment intéressé par l'écriture de types basés sur le temps, je vous conseillerais de ne pas le faire... et je dis cela en tant que personne qui... fait font exactement cela. Utilisez les capacités intégrées, ou une bibliothèque tierce telle que, hum, mine . Travailler correctement avec les dates et les heures est étonnamment difficile :)

27voto

shoba Points 241
namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}

Supprimer le mot contrôleur de l'espace nom

8voto

Mats Gausdal Points 99

En class TimeTest est en conflit avec namespace TimeTest .

Si vous ne pouvez pas changer l'espace de noms et le nom de la classe :

Créer un alias pour la catégorie de classe.

using TimeTest_t = TimeTest.TimeTest;

TimeTest_t s = new TimeTest_t();

6voto

Alexei Points 3124

Toutes les réponses indiquent la cause, mais parfois le plus gros problème est d'identifier tous les endroits qui définissent un espace de nom inapproprié. Avec des outils comme Resharper qui ajustent automatiquement l'espace de nom en utilisant la structure du dossier, il est assez facile de rencontrer ce problème.

Vous pouvez obtenir toutes les lignes qui créent le problème en recherchant dans projet / solution en utilisant la regex suivante :

namespace .+\.TheNameUsedAsBothNamespaceAndType

4voto

James L. Points 2741

Si vous travaillez sur une grosse application et que vous ne pouvez pas changer de nom, vous pouvez taper un nom de domaine. . pour sélectionner le type que vous voulez dans l'espace de noms :

namespace Company.Core.Context{
  public partial class Context : Database Context {
    ...
  }
}
...

using Company.Core.Context;
someFunction(){
 var c = new Context.Context();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X