Program Club

클래스 이름을 C #의 문자열로 가져옵니다.

proclub 2020. 11. 17. 21:15
반응형

클래스 이름을 C #의 문자열로 가져옵니다.


클래스 이름을 가져와 C #의 문자열로 변환하는 방법이 있습니까?

Entity Framework의 일부로 .Include 메서드는 쿼리를 수행 할 때 조인 할 점으로 구분 된 문자열 목록을 가져옵니다. 참여하고 싶은 클래스 모델이 있고, 리팩토링 및 향후 코드 유지 관리의 이유로이 클래스를 참조 할 때 컴파일시 안전성을 확보하고 싶습니다.

따라서 이렇게 할 수있는 방법이 있습니까?

class Foo
{
}

tblBar.Include ( Foo.GetType().ToString() );

인스턴스 없이는 GetType ()을 할 수 없다고 생각합니다. 어떤 아이디어?


Include에는 클래스 이름이 아닌 속성 이름이 필요합니다 . 따라서 유형의 이름이 아니라 원하는 속성의 이름입니다. 리플렉션으로 얻을 수 있습니다 .


메서드 .GetType()이기 때문에 인스턴스 없이는 사용할 수 없습니다 GetType.

다음과 같이 유형에서 이름을 가져올 수 있습니다.

typeof(Foo).Name

Chris가 지적했듯이 어셈블리 정규화 된 이름이 필요한 경우 사용할 수 있습니다.

typeof(Foo).AssemblyQualifiedName

다음과 같이 할 수도 있습니다.

Type CLASS = typeof(MyClass);

그런 다음 이름, 네임 스페이스 등에 액세스 할 수 있습니다.

 string CLASS_NAME = CLASS.Name;
 string NAMESPACE = CLASS.Namespace;

typeof(Foo).ToString()

?


당신은 사용할 수있는 DbSet<contact>대신을 ObjectSet<contact>당신이 예를 들어 매개 변수로 람다를 사용할 수 있도록,tblBar.Include(a => a.foo)


리플렉션을 사용하는 또 다른 대안은 MethodBase 클래스를 사용하는 것입니다.

예제에서는 원하는 정보를 제공하는 정적 속성 (또는 메서드)을 추가 할 수 있습니다. 다음과 같은 것 :

class Foo
{
    public static string ClassName
    {
        get
        {
            return MethodBase.GetCurrentMethod().DeclaringType.Name;
        }
    }
}

유형의 인스턴스를 생성하지 않고 사용할 수 있습니다.

tblBar.Include(Foo.ClassName);

런타임에 다음을 제공합니다.

tblBar.Include("Foo");

참고 URL : https://stackoverflow.com/questions/179700/get-the-name-of-a-class-as-a-string-in-c-sharp

반응형