'네임 스페이스'이지만 '유형'처럼 사용됩니다.


87

이것은 클래스가 사용하는 내 프로그램입니다 Time2라고합니다 TimeTest에 참조가 추가되었습니다. 오류 'Time2'는 '네임 스페이스'이지만 '유형'처럼 사용됩니다.

누군가이 오류가 무엇이며 어떻게 수정하는지 알려주시겠습니까?

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

8
TimeTest.TimeTest 유형이 있습니다. 그러지 마. 네임 스페이스와 동일한 이름을 지정하지 마십시오. 모호성 오류가 발생합니다.
Anthony Pegram 2013

자세한 내용은 다음을 참조하십시오. blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
Anthony Pegram

1
Time2이 질문에 대한 선언을 정말로 추가해야합니다. 아마도 문제가있는 곳일 것입니다. 대부분의 경우 당신이있어 한 Time2라는 네임 스페이스에 정의Time2
JerKimball

1
TheAce, 다음에 문제를 재현하는 최소한의 샘플을 제공하도록 노력하십시오. 필요하지 않은 줄을 제거했습니다. Time2 정의를 추가하여 완성하십시오.
Alexei Levenkov 2013

답변:


126

나는 당신이 적어도 두 번 같은 문제가 있다고 생각합니다 .

여기:

namespace TimeTest
{
    class TimeTest
    {
}

... 당신은 그것이있는 네임 스페이스와 같은 이름을 가진 타입을 선언하고 있습니다. 그렇게하지 마십시오.

이제 분명히 Time2. 나는 의심 추가하는 경우 :

using Time2;

using지시문 목록에 코드가 컴파일됩니다. 하지만 더 큰 문제인 이름 선택 문제를 해결하십시오. ( 이유에 대한 자세한 내용은 위의 링크를 참조하십시오. 나쁜 생각 .)

(또한, 시간 기반 유형을 작성하는 데 정말로 관심이 없다면 그렇게 하지 않는 것이 좋습니다. 정확히 그렇게하는 사람으로서 그렇게 말합니다. 내장 된 기능을 사용하거나 세 번째 같은 파티 라이브러리, 음, . 날짜와 시간을 정확하게 작업하는 것은 놀랍도록 까다 롭습니다. :)


1
네임 스페이스 이름을 변경하고 문제를 해결했습니다. VS2019에서 생성 된 기본 코드이기 때문에 정말 이상합니다.
Tim Melton

1
@TimMelton : 네임 스페이스 이름 TimeTest를 선택한 다음 클래스 이름 TimeTest도 선택했다면 기본값이 될 것입니다. 당신은 ... 그 같은 모두를 선택해야 할 것
존 소총

나는 지금 문제를 본다. 제가보고 있던 비디오에서 Controller 파일을 넣을 Controller라는 폴더를 만들었습니다. 여기에서 네임 스페이스의 Controller가 나온 곳입니다. VS auto는 폴더 이름을 네임 스페이스에 추가합니다. 네임 스페이스 뒤에 Controller라는 단어를 제거하면 문제가 해결됩니다.
Tim Melton

그것은 그것을 고쳤습니다! 감사. 때때로 Visual Studio는 실망 스러울 수있는 잘못된 오류 메시지를 표시합니다.
theITvideos

제 경우에는 몇 년 전에 불로 죽였다고 생각했던 중복 된 이름 문제가있는 오래된 도서관에 대한 참조를 어떻게 든 가져올 수있었습니다.
Wildcat Matt

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

네임 페이스에서 컨트롤러 단어 제거


답변이 아닌 것으로
표시됨

1
Microsoft.AspNetCore.Mvc 네임 스페이스의 Controller 클래스에서 상속하려고 할 때 폴더가 Controller "s"가 아니라 Controller라고하는 경우 최종 네임 스페이스가 Controller로 지정되어 네임 스페이스의 이름 때문에 오류가 발생합니다. 이 대답은 정확하며 프로젝트의 Controllers 폴더에 잘못된 이름을 지정했음을 확인하는 데 도움이되었습니다.
Elek Guidolin 2017 년

이것은 내 문제를 해결했습니다. 매우 명확한 답변에 감사드립니다!
Carthax

2

큰 앱에서 작업 중이고 이름을 변경할 수없는 경우 a .를 입력하여 네임 스페이스에서 원하는 유형을 선택할 수 있습니다 .

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

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

1

"Response"라는 폴더 안에 "Response.cs"클래스를 만들면서이 문제가 발생했습니다. 그래서 VS는 new Response ()폴더 / 네임 스페이스 로 잡았습니다 .

그래서 클래스 이름을 StatusResponse.cs로 변경하고를 호출 new StatusResponse()하여 문제를 해결했습니다.


1

모든 답변이 원인을 나타내지 만 때로는 부적절한 네임 스페이스를 정의하는 모든 위치를 식별하는 것이 더 큰 문제입니다. 폴더 구조를 사용하여 네임 스페이스를 자동으로 조정하는 Resharper와 같은 도구를 사용하면이 문제가 발생하기 쉽습니다.

다음 정규식을 사용하여 프로젝트 / 솔루션에서 검색하여 문제를 생성하는 모든 줄을 가져올 수 있습니다.

namespace .+\.TheNameUsedAsBothNamespaceAndType

0

클래스와 네임 스페이스 이름이 동일한 지 확인하십시오.

네임 스페이스와 클래스 이름이 같을 때 발생합니다. 네임 스페이스를 사용하려면 네임 스페이스의 전체 이름을 작성하십시오.

using Student.Models.Db;

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

-3

오류가

26 행 :
27 행 : @foreach (모델의 고객 고객) 28 행 : {29 행 :


@foreach와 같은 전체 이름 공간을 제공합니다 (모델의 Start.Models.customer 고객).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.