2009-02-27 86 views

回答

4

一種選擇是仿製藥:

public static ConvertFile<T>() where T : IFileConvert 
{ 
    Type type = typeof(T); // if you need it 
} 

,並呼籲爲:

ConvertFile<SomeFileType>(); 
+0

如果你不知道的T時間提前,可以使用MethodInfo.MakeGenericMethod調用它的類...棘手,但 – 2009-02-27 15:43:21

0

你就不能這樣做:

public static ConvertFile(IFileConvert fileType) 
+0

這涉及實例,我不想要做 – cjk 2009-02-27 15:40:11

3

不,這是不可能的。不過你可以這樣做:

public static void ConvertFile<T>() where T : IFileConvert { 
    Type fileType = typeof(T); 
} 

改爲。

1

如果要強制執行,在編譯時,仿製藥是唯一的出路:

public static ConvertFile<T>(T fileType) 
    where T : IFileType 

要在運行時檢查,你可以這樣做:

Debug.Assert(typeof(IFileType).IsAssignableFrom(fileType)); 
0

擴大Marc的答案。他是正確的,沒有泛型,在編譯時沒有辦法強制執行。如果你不能或不想使用泛型,你可以添加一個運行時檢查如下。

public static void ConvertFile(Type type) { 
    if (!typeof(IFileType).IsAssignableFrom(type)) { 
    throw new ArgumentException("type"); 
    } 
    ... 
} 
相關問題