이 코드는 :
Type.GetType("namespace.a.b.ClassName")
을 반환합니다 null
.
그리고 나는 사용에있다 :
using namespace.a.b;
최신 정보:
유형이 존재하고 다른 클래스 라이브러리에 있으며 문자열 이름으로 가져와야합니다.
답변
Type.GetType("namespace.qualified.TypeName")
형식이 mscorlib.dll 또는 현재 실행중인 어셈블리에서 발견 된 경우에만 작동합니다.
위 사항 중 어느 것도 해당되지 않으면 어셈블리 인증 이름 이 필요합니다 .
Type.GetType("namespace.qualified.TypeName, Assembly.Name")
답변
어셈블리 규정 이름없이 dll 이름으로 유형을 가져올 수도 있습니다. 예를 들면 다음과 같습니다.
Type myClassType = Type.GetType("TypeName,DllName");
나는 같은 상황이 있었고 그것이 나를 위해 일했다. “DataModel.QueueObject”유형의 객체가 필요하고 “DataModel”에 대한 참조가 있으므로 다음과 같이 유형을 가져 왔습니다.
Type type = Type.GetType("DataModel.QueueObject,DataModel");
쉼표 뒤의 두 번째 문자열은 참조 이름 (dll 이름)입니다.
답변
이 방법을 사용해보십시오
public static Type GetType(string typeName)
{
var type = Type.GetType(typeName);
if (type != null) return type;
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
type = a.GetType(typeName);
if (type != null)
return type;
}
return null ;
}
답변
Dictionary<string, Type> typeCache;
...
public static bool TryFindType(string typeName, out Type t) {
lock (typeCache) {
if (!typeCache.TryGetValue(typeName, out t)) {
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
t = a.GetType(typeName);
if (t != null)
break;
}
typeCache[typeName] = t; // perhaps null
}
}
return t != null;
}
답변
어셈블리가 ASP.NET 응용 프로그램 빌드의 일부인 경우 BuildManager 클래스를 사용할 수 있습니다.
using System.Web.Compilation
...
BuildManager.GetType(typeName, false);
답변
클래스가 현재 assambly 상태가 아닌 경우 QualifiedName을 제공해야하며이 코드는 클래스의 QualifiedName을 얻는 방법을 보여줍니다.
string qualifiedName = typeof(YourClass).AssemblyQualifiedName;
그런 다음 QualifiedName으로 유형을 얻을 수 있습니다.
Type elementType = Type.GetType(qualifiedName);
답변
중첩 된 Type 인 경우을 변환하는 것을 잊어 버릴 수 있습니다. +
어쨌든, typeof( T).FullName
당신이 말해야 할 것을 말해 줄 것입니다
편집 : BTW 사용 (아시다시피)은 컴파일 타임에 컴파일러에 대한 지시문 일 뿐이므로 API 호출의 성공에 영향을 줄 수 없습니다. (프로젝트 또는 어셈블리 참조가있는 경우 잠재적으로 영향을 줄 수 있으므로 정보가 쓸모가 없으므로 필터링이 필요합니다 …)