我成立了一個方法傳遞一個類型作爲參數您可以傳遞一個類型並強制在C#中傳遞哪種類型?
private void SomeMethod(System.Type type)
{
//some stuff
}
有沒有辦法強制執行的類型,這樣就可以從特定的基類繼承的類型只能傳遞?
我成立了一個方法傳遞一個類型作爲參數您可以傳遞一個類型並強制在C#中傳遞哪種類型?
private void SomeMethod(System.Type type)
{
//some stuff
}
有沒有辦法強制執行的類型,這樣就可以從特定的基類繼承的類型只能傳遞?
有很多的可能性...
基於實例:
private void SomeMethod(object list) // total generic
成爲
private void SomeMethod(IEnumerable<object> list) // enumerable-generic
或
private void SomeMethod(List<object> list) // explicit list
或帶有通用功能:
private void SomeMethod<T>() where T : MyType // << contraints
{
var theType = typeof(T);
}
呼叫:
var xyz = SomeClass.SomeMethod<string>(); // for example
有關約束的更多信息: http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx
private void SomeMethod
嘗試使你的函數的通用,並傳遞類型參數通過泛型類型參數:
private void SomeMethod<T>() where T : U {
Type type = typeof(T);
// some stuff
}
您可以使用列出的任何類型約束here。
如果它具有處理任意類型的對象(例如,當你沒有對誰調用功能控制),那麼你可能只需要使用運行時斷言:在
private void SomeMethod(System.Type type)
{
if(!typeof(U).IsAssignableFrom(type)) {
throw new ArgumentException("type must extend U!");
}
又見這個問題Type Restriction。
'void SomeMethod(BaseType obj)',no? – leppie
很多可能性: – TheHe
他沒有傳遞某種類型的對象 - 他正在傳遞類型本身。 – hatchet