2013-07-03 74 views
2

所有的值類型,我試圖完成一個類中的以下一般功能:

public void Test(var input) 
{ 
    WriteToFile(input.ToString()); 
} 

private void WriteToFile(string input) 
{ 
    ..... 
} 

但「VAR」語句不能在一個類中使用。所以我想知道最簡單的方法是完成與上面相同的事情。

一種解決方案是創建爲每個值類型的函數,但必須比必要更多的麻煩:

public void Test(string input) 
{ 
    WriteToFile(input); 
} 

public void Test(int input) 
{ 
    WriteToFile(input.ToString()); 
} 

public void Test(double input) 
{ 
    WriteToFile(input.ToString()); 
} 

private void WriteToFile(string input) 
{ 
    ..... 
} 

編輯:當給它一些更多的思考,我明白,這是不真的是我的問題的答案。我發佈了一個有更多想法背後的新問題。我不會刪除這個問題,因爲別人可能會發現這個有用的。

+2

只需使用它們的基類,'object'而不是'var'。 –

+0

使用'object'? 'public void Test(object input)' – user1429080

回答

8

只是傳遞object並在其上調用ToString():(!輸入= NULL)

public void Test(object input) 
{ 
    WriteToFile(input.ToString()); 
} 
+0

如果輸入不是字符串? –

+0

我認爲,要麼Convert.ToString()可能是更好的選擇 –

+1

每個對象都有方法'ToString()',它的默認實現返回類型名稱。這裏閱讀更多[MSDN](http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx)。只要object不爲null,就可以安全使用。 – gzaxx

6
public void Test<T>(T input) 
{ 
    WriteToFile(Convert.ToString(input)); 
} 
3

你可以嘗試使用 public void Test(object input)

,也許測試調用toString方法之前

0

使函數Test接受一個對象參數,並在確定其內部的類型後繼續。

public void Test(object input) 
{ 
     var res = (dynamic)null; 
     if (input.GetType() == typeof(String))) 
     { 
      res = input.ToString(); 
      WriteToFile(res); 
     } 
} 

編輯:爲什麼這種方法?

在未來,如果你需要擴展到其他類型的支持,以及,你可以不喜歡以下(約浮動,雙,長,INT問題會談...)

public void Test(object input) 
{ 
     var res = (dynamic)null; 
     if (input.GetType() == typeof(String))) 
     { 
      res = input.ToString(); 
      WriteToFile(res); 
     } 
     if (input.GetType() == typeof(float))) 
     { 
      //do some other operations here... 
     } 
} 

即使更好的實現方法是使用「is」運算符。

 if (input is string) 
     { 
      res = input.ToString(); 
      WriteToFile(res); 
     } 
+0

我不明白爲什麼這種類型檢查或使用'動態'是必要的。 – Henrik

+0

另外,'object.GetType()== typeof(String)'甚至沒有編譯。 – Henrik

+0

@Henrik:謝謝你指出......這是一個錯字。另外,更新了我的答案。 –