「名前空間」ですが、「タイプ」のように使用されます


83

これは、クラスが使用するTime2と呼ばれる私のプログラムです。TimeTestに参照を追加しています。エラーが発生し続けます。「Time2」は「名前空間」ですが、「タイプ」のように使用されます。

誰かがこのエラーとは何か、そしてそれを修正する方法を教えてもらえますか?

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

8
タイプはTimeTest.TimeTest(および他の同様のもの)です。そうしないでください。タイプに名前空間と同じ名前を付けないでください。あいまいなエラーが発生します。
アンソニーペグラム2013

詳細については、次を参照してください:blogs.msdn.com/b/ericlippert/archive/2010/03/09/…–
Anthony Pegram

1
Time2おそらく問題がそこにあるので、この質問に(削除された)宣言を追加する必要があります。ほとんどの場合Time2、次の名前空間で定義されていますTime2
JerKimball 2013

1
TheAce、次回は問題を再現する最小限のサンプルを提供してみてください。不要な行を削除しました。Time2定義を追加して完成させてください。
Alexei Levenkov 2013

回答:


123

少なくとも2回は同じ問題が発生していると思います。

ここに:

namespace TimeTest
{
    class TimeTest
    {
}

...それが含まれている名前空間と同じ名前の型を宣言しています。そうしないでください。

今、あなたはどうやらと同じ問題を抱えていTime2ます。あなたが追加した場合、私は疑う

using Time2;

usingディレクティブのリストに、コードがコンパイルされます。しかし、どうか、どうか、より大きな問題、つまり問題のある名前の選択を修正してください。(上記のリンクをたどって、それが悪い考えである理由の詳細を確認してください。)

あなたは本当に時間ベース型を書き込むことに興味がない限り(また、私はあなたがそうしないように助言するだろう...と私はそれを言う誰かのように行い、正確に行うこと。内蔵で機能、またはサードを使用しますええと、私のようなパーティーライブラリ。日付と時刻を正しく操作するのは驚くほど毛深いです。:)


1
名前空間名を変更して問題を修正しました。それはVS2019によって生成されたデフォルトのコードであるため、これは本当に奇妙です。
ティムメルトン

1
@TimMelton:名前空間名TimeTestを選択してから、クラス名TimeTestも選択した場合は、デフォルトになります。あなたは同じ...それらの両方を選択する必要があるだろう
ジョンスキート

私は今問題を見ています。私が見ていたビデオでは、Controllerファイルを配置するためにControllerという名前のフォルダーを作成しました。これが名前空間のControllerの由来です。VSは、フォルダー名を名前空間に自動追加します。名前空間の後にControllerという単語を削除すると、問題が修正されます。
ティムメルトン

それはそれを修正しました!ありがとう。Visual Studioは、イライラする可能性のある誤解を招くエラーメッセージを表示することがあります。
theITvideos

私の場合、何とかして、何年も前に火事で殺したと思っていた、この重複する名前の問題があった古いライブラリへの参照を取り込むことができました。
ワイルドキャットマット

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

namepsaceからコントローラーワードを削除します


答えではないというフラグが
立て

1
Microsoft.AspNetCore.Mvc名前空間のControllerクラスから継承しようとすると、フォルダーがController "s"ではなくControllerと呼ばれる場合、名前空間の名前が原因でControllerがエラーをスローするため、最終的な名前空間が作成されます。この答えは正しく、プロジェクトのControllersフォルダーに間違った名前を付けていることがわかりました。
Elek

これで私の問題は解決しました。非常に明確な答えをありがとう!
Carthax

1

大きなアプリで作業していて名前を変更できない場合は、a.と入力して、名前空間から目的のタイプを選択できます。

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

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

0

クラスと名前空間の名前が同じであることを確認してください...

名前空間とクラス名が同じ場合に発生します。名前空間を使用する場合は、名前空間のフルネームを1つ記述します。

using Student.Models.Db;

namespace Student.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            List<Student> student = null;
            return View();
        }
    }

0

「Response」という名前のフォルダ内に「Response.cs」クラスを作成したときに、この問題が発生しました。したがって、VSはnew Response ()フォルダ/名前空間としてキャッチしていました。

そこで、クラス名をStatusResponse.csに変更して呼び出しましたnew StatusResponse()。これにより、問題が解決しました。


0

すべての答えが原因を示していますが、より大きな問題は、不適切な名前空間を定義するすべての場所を特定することです。フォルダ構造を使用して名前空間を自動的に調整するResharperのようなツールを使用すると、この問題が発生しやすくなります。

次の正規表現を使用してプロジェクト/ソリューションを検索すると、問題を引き起こすすべての行を取得できます。

namespace .+\.TheNameUsedAsBothNamespaceAndType

-3

エラーが

26行目:
27行目:@foreach(モデルの顧客顧客)28行目:{29行目:


@foreach(ModelのStart.Models.customer customer)のようなフルネームスペースを指定します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.