2010-09-21 170 views
1

在方法我有一個這樣的對象:如何將對象實例轉換爲泛型類型?

Activator.CreateInstance(Type.GetType(TargetObject)) 

和我需要通過該對象的其他類接受通用類型:

public class Repository<T> where T : class 
{ 
} 

如何使用此對象爲T到存儲庫類?

+0

剛剛用標記工具編輯你的問題 – 2010-09-21 10:16:42

+0

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

回答

0

這是不可能的。您已在設計時定義T.

+0

對不起,但那是不正確的;您可以*在運行時定義'T'(因爲.NET泛型是由運行時提供的,而不是編譯器),但它不是微不足道的,應該僅限於必要的場景。 – 2010-09-21 10:20:06

+0

同意你的意見。但他想將創建的對象傳遞給不可能的類。 – gsharp 2010-09-21 12:36:21

1

你可以做到這一點與反思,例如:

Type repoType = typeof(Repository<>).MakeGenericType(yourType); 

但很快反射後裔反思 - 因爲你那麼需要通過反射來談談repoType。有是儘量減少這種影響的方式,雖然:

  • 非通用接口(最簡單的方法)
  • 呼籲通過反射泛型方法一次是通過定期的靜態通用代碼完成了所有的其他工作

對於第一個,我可能有一個IRepository接口(非通用),那麼它就是:

IRepository repo = (IRepository)Activator.CreateInstance(repoType); 
repo.SomeNonGenericMethods(args); // etc 
相關問題