[C#] Type.GetType (“namespace.abClassName”)은 null을 반환합니다.

이 코드는 :

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 호출의 성공에 영향을 줄 수 없습니다. (프로젝트 또는 어셈블리 참조가있는 경우 잠재적으로 영향을 줄 수 있으므로 정보가 쓸모가 없으므로 필터링이 필요합니다 …)