在方法我有一個這樣的對象:如何將對象實例轉換爲泛型類型?
Activator.CreateInstance(Type.GetType(TargetObject))
和我需要通過該對象的其他類接受通用類型:
public class Repository<T> where T : class
{
}
如何使用此對象爲T到存儲庫類?
在方法我有一個這樣的對象:如何將對象實例轉換爲泛型類型?
Activator.CreateInstance(Type.GetType(TargetObject))
和我需要通過該對象的其他類接受通用類型:
public class Repository<T> where T : class
{
}
如何使用此對象爲T到存儲庫類?
這是不可能的。您已在設計時定義T.
對不起,但那是不正確的;您可以*在運行時定義'T'(因爲.NET泛型是由運行時提供的,而不是編譯器),但它不是微不足道的,應該僅限於必要的場景。 – 2010-09-21 10:20:06
同意你的意見。但他想將創建的對象傳遞給不可能的類。 – gsharp 2010-09-21 12:36:21
你可以做到這一點與反思,例如:
Type repoType = typeof(Repository<>).MakeGenericType(yourType);
但很快反射後裔更反思 - 因爲你那麼需要通過反射來談談repoType
。有是儘量減少這種影響的方式,雖然:
對於第一個,我可能有一個IRepository
接口(非通用),那麼它就是:
IRepository repo = (IRepository)Activator.CreateInstance(repoType);
repo.SomeNonGenericMethods(args); // etc
剛剛用標記工具編輯你的問題 – 2010-09-21 10:16:42
http://stackoverflow.com/questions/266115/pass-an-instantiated-system-type-as-a-type-parameter-for-a-generic -class – sloth 2010-09-21 10:20:53