2015-10-18 30 views
2

我有其接收一個通用型使用發送在作爲一個通用類型的對象

public string GetObject<T>(IEnumerable<T> obj) 
{ 
    //Type t = typeof(T); 
    //Type t = obj.GetType(); 
    //var t = (T)Activator.CreateInstance(typeof(T),new object[] {obj }); 
    var output = fh.WriteString(t); 
    return output; 
} 

我想要訪問接收在作爲通用類型此目的,所以我可以用它作爲一個參數傳遞給一個方法FileHelperEngineWriteString方法。註釋行沒有上述正在其中,如果我試圖使用從任一方法產生的t變量前三註釋行,我得到一個錯誤說

Argument System.Type is not assignable to parameter type Systems.Collections.Generic.IEnumerable<T>

如何獲取該對象用於WriteString方法?

編輯 我很抱歉,如果我看起來模糊:)我實際上想要傳遞給FileHelperEngine使用的方法的值。我不確定是否有任何註釋行是正確的,或者是將實際對象發送到泛型類型的理想方式。我想要的只是能夠將參數中收到的值作爲obj被FileHelperEngine使用,這基本上是將此IEnumerable obj發送給WriteString方法。

回答

3

錯誤信息很清楚。 The method signature accepts a IEnumerable<T>,而不是Type對象。你需要通過IEnumerable<T>實例

public string GetObject<T>(IEnumerable<T> obj) 
{ 
    return fh.WriteString(obj); 
} 

編輯:

FileEngineHelper類環顧四周後,我會假設你使用的非通用FileEngineHelper構造函數,它接受一個Type對象而不是泛型類構造函數。當您使用非泛型類構造函數時,WriteString將始終採用IEnumerable<object>,而不是IEnumerable<T>

移動到通用版本,這個工程:

public class F<T> where T : class 
{ 
    private FileHelperEngine<T> fh = new FileHelperEngine<T>(); 
    public string GetObject(IEnumerable<T> obj) 
    { 
     return fh.WriteString(obj); 
    } 
} 
+0

但同樣,看到OP的代碼。看起來好像OP不是試圖賦予'obj',而是使用反射創建的實例,其中整個'T'類型具有一個參數構造器,接受整個'IEnumerable '... –

+2

@MatíasFidemraizer我認爲OP是困惑:)這正是我的觀點。 –

+0

讓我們來看看OP是什麼...現在,你的答案和我的答案都是不正確的...... –