c#中是否存在“Type-unsafe”函数参数,我们如何制作一个?

时间:2009-12-01 03:30:43

标签: c# function

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 + "\" ");
    }
}

那么,我们不是只有两个Add函数吗?例如

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

3 个答案:

答案 0 :(得分: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 :(得分:4)

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

使用

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

答案 2 :(得分:1)

使用Object作为类型。

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

     var sval = value.ToString();
     if(sval != "")
     { Attributes.Add( key + "=\"" + sval + "\""}
}