클래스 이름을 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
'Program Club' 카테고리의 다른 글
| YAML의 빈 사전 구문 (0) | 2020.11.17 |
|---|---|
| 32 비트 정수를 사용하여 충돌 률이 낮은 고속 문자열 해싱 알고리즘 (0) | 2020.11.17 |
| AJAX 도메인 간 호출 (0) | 2020.11.17 |
| Java에서 Comparable.compareTo의 반환 값은 무엇을 의미합니까? (0) | 2020.11.16 |
| 이터 러블을 일정한 크기의 청크로 분할하는 방법 (0) | 2020.11.16 |