2009-12-01 11 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

相关问题