2013-08-01 4 views
1

한 컨트롤러에서 다른 컨트롤러로 일부 코드를 복사했습니다. 두 파일 모두 같은 구문을 사용하지만,이 문제를 해결할 수는 없습니다.내가 왜 .TrimSafe에 액세스 할 수 없습니까?

address.Name.Value = source.Name.TrimSafe(); 내 첫 번째 파일에 있지만 내 두 번째 파일에 괜찮습니다. .TrimSafe 플래그가 존재하지 않습니다. telescense에서 trim, trimEnd 또는 trimStart를 선택할 수 있습니다. trimSafe가있는 곳과 사용하지 않는 이유는 무엇입니까?

+0

두 파일이 동일한 네임 스페이스를 사용하고 있습니까? – Shaz

+0

아니요, 서로 다릅니다. – John

+0

첫 번째 파일에서 "using"지시어 목록을보고 두 번째 파일과 비교해보십시오. TrimSafe()는 두 번째 파일에서 가져 오지 않는 확장 메서드 일 수 있습니다. –

답변

3

TrimSafe()은 표준 .NET 방법이 아닙니다. 이것은 TrimSafe()가 첫 번째 파일에 메서드로 존재하지만 두 번째 파일로 복사되지 않았 음을 의미하며 개인 함수 또는 비 정적 함수입니다.

&도 청소해야 프로젝트를 다시 작성할 수 있습니다.

+0

아니, 첫 번째 파일에 메서드로 존재하지 않습니다. '소스'는 그 안에 트림 세이프에 대해 언급하지 않은 VM입니다. 또한 청소하고 다시 작업을하지 않았지만 감사합니다 – John

+0

정적 인 경우 그는 그 이름 공간을 '사용'해야합니다. – Shaz

+1

도움을 주신 네임 스페이스 폴더 안에 strinExtension.cs 파일이 있습니다. – John

0

나에게 네임 스페이스 문제가있는 것 같습니다.

이를 고려

// In some file somewhere 
namespace firstNamespace 
{ 
    Class MyString : String 
    { 
     public static TrimSafe() {} 
    } 
} 

// The first file you copied from 
namespace firstNamespace 
{ 
    public void foo() { TrimSafe(); } // Works! 
} 

namespace secondNamespace 
{ 
    public void fee() { TrimSafe(); } // Nope :(
} 

이 마지막 문제를 해결하려면, 당신은 다른 using 문에 상단에 using firstNamespace;를 추가해야합니다. 그 이유는 복사하려는 첫 번째 파일이 TrimSafe가 정의 된 것과 동일한 네임 스페이스에 있기 때문입니다.

C++에서 일반적으로 #include은 사용하는 각 클래스에 대해 참조되는 모든 .h 파일입니다.

C#에서는 클래스 대신 using 문을 추가하지 않고 대신 네임 스페이스를 추가합니다. 네임 스페이스가 using 일 경우에만 해당 네임 스페이스의 모든 것이 함께 제공됩니다. 네임 스페이스 xyz에 정의 된 내용은 각 클래스에 using이 없어도 네임 스페이스 xyz에 정의 된 다른 모든 항목을 확인합니다.

두 번째 파일이 다른 네임 스페이스에 있으므로 첫 번째 네임 스페이스에 무엇이 있는지 모르기 때문에 TrimSafe가 표시되지 않습니다.

어쨌든 내 추측입니다.

0

익숙한 같은데, 난 당신이뿐만 아니라 과수원 스웹 자습서를하고있는 것 같아요 :) 당신은 당신의 프로젝트라는 도우미에 폴더를 추가해야하고, 그것에서이 클래스가 있어야합니다

public static class StringExtensions { 
    public static string TrimSafe(this string s) { 
     return s == null ? string.Empty : s.Trim(); 
    } 
} 

을 메소드가 필요한 곳에 네임 스페이스를 포함하십시오.

관련 문제