2017-06-12 96 views
0

我有這樣的:泛型沒有特定類型

class Program 
    { 
     static void Main(string[] args) 
     { 

      var result = new Result<int, bool> { success = true, Data = 88 }; 
      var result2 = new Result<string, bool> { success = true, Data = "Niels" }; 


      Console.WriteLine(result2.success); 
      Console.WriteLine(result2.Data); 

      Console.ReadKey(); 
     } 
    } 

    public class Result<T, TU> 
    { 
     public TU success { get; set; } 
     public T Data { get; set; } 


    } 

所以這是具有兩個屬性的簡單的泛型類。

我只是想知道,如何讓這樣的:

var result = new Result<int, bool> { success = true, Data = 88 }; 

更通用的:)。因爲你還是要「說」的返回類型是什麼:<int, bool>

所以是有可能做到這一點的例子是這樣的:

<T var1, T var2> ? 

謝謝

所以,我的意思是這樣:

var result = new Result<T var1, T var2> { success = true, Data = 88 }; 

這樣就可以填補的成功和任何你想要的數據(字符串,整數,浮點,布爾)..

+0

你的意思是你想創建一個'Result'的實例,而不必明確寫出泛型? – grek40

+0

'公共結果 f(T t,TU tu)=>新結果(t,tu);''是更通用的。但編譯器必須從某處獲取類型參數。你必須更具體地說明''是什麼意思。 –

+0

構造函數不能自動推斷泛型類型參數。但是方法*可以*,所以使用grek40提供的工廠方法。 – HimBromBeere

回答

6

您可以從給定的參數自動使用工廠方法來解決類型:

public static class ResultFactory 
{ 
    public static Result<T, TU> Create<T, TU>(TU success, T data) 
    { 
     return new Result<T, TU> { success = success, Data = data }; 
    } 
} 

var result = ResultFactory.Create(true, 88); 
var result2 = ResultFactory.Create(true, "Niels"); 
+0

謝謝。但創建來自哪裏? – LikeToDo

+1

@默認謝謝,我可能永遠不會再在答案窗口中寫代碼而不是實際的IDE – grek40

+1

@LikeToDo這是'Factory'類中的方法名 – Default

0

因爲你還是要「說」的返回類型是什麼:<int, bool>

是的,您將不得不指定類型T,TU,並且不能保持類型不變。類型必須在編譯時關閉。因此,將它稱爲<T var1, T var2>將不可能,除非它被包含在另一個通用類型或方法中