2009-12-01 14 views
0
public List<string> Attributes = new List<string>(); 

public void Add(string key, string value) 
{ 
    if (value.ToString() != "") 
    { 
     Attributes.Add(key + "=\"" + value + "\" "); 
    } 
} 

public void Add(string key, int value) 
{ 
    if (value.ToString() != "") 
    { 
     Attributes.Add(key + "=\"" + value + "\" "); 
    } 
} 

所以,我們可以只做一個,而不是有兩個添加功能?例如c#中是否存在「類型不安全」的函數參數?我們如何創建一個?

public void Add(string key, <var> value) 
{ 
    if (value.ToString() != "") 
    { 
     Attributes.Add(key + "=\"" + value + "\" "); 
    } 
} 
+0

也許你能解釋一下到底什麼是你想要完成什麼? :-) – CesarGon 2009-12-01 03:33:40

+0

由於這兩個函數的內容完全一樣,我想到爲什麼不僅僅有一個函數會用於兩種類型...... =) – Jronny 2009-12-01 03:58:37

回答

6

注意,在這種情況下,你的函數的整數版本有反正要轉換爲字符串列入名單。所以,如果你的整個問題真的如所說,你只需要你的函數的字符串版本,可以直接調用它是這樣的:

int SomeValue = 42; 
string SomeName= "The Answer to Life, the Universe, and Everything"; 
Add(SomeName, SomeValue.ToString()); 

但如果你問一個更一般的問題,你可以使用object類型,像這樣:

public void Add(string key, object value) 
{ 
    if (value != null) 
    { 
     Attributes.Add(key + "=\"" + value.ToString() + "\" "); 
    } 
} 

甚至更​​好,只是使用的String.Format:

String.Format("{0}=\"{1}\"", SomeName, SomeValue); 
1

使用對象的類型。

public void Add(string key, object value) 
{ 
    if(value == null) {return;} 

    var sval = value.ToString(); 
    if(sval != "") 
    { Attributes.Add(key + "=\"" + sval + "\""} 
} 
4
public void Add<T>(string key, T value) 
{ 
    if (value.ToString() != "") 
    { 
     Attributes.Add(key + "=\"" + value + "\" "); 
    } 
} 

使用

Add("key", 22); 
Add("key", "value"); 
+0

比類型不安全的方法好得多。 ps。可以在沒有類型跟隨它們的情況下使用Add,因爲類型是由編譯器根據傳入的值推斷的。添加(「key」,1)和Add(「key」,「value」) – Will 2009-12-01 04:11:51

+2

在這種情況下沒有任何通用的理由。如果你不喜歡對象,可以假裝它是一些神奇的「IStringable」接口。 – 2009-12-01 04:41:01

相關問題