C#传递object类型的可选参数

时间:2016-08-19 18:32:59

标签: c# class optional-parameters

我在这里得到了一个带有字符串参数的代码:

public static void DisplayText(string Default)
{
    foreach (char c in Default)
    {
        Console.Write(c);
        Thread.Sleep(25);
    }
}

现在,我需要的是能够使这段代码工作,所以它也可以采用多个参数:

DisplayText("Welcome to you, {0} the {1}.", player.Name, player.Class);

但我还需要能够只使用可为空的对象参数放置一个字符串参数。我在这里尝试了这段代码:

我尝试使用nullable<>但它让我无处可去。

现在,任何指针?

2 个答案:

答案 0 :(得分:3)

为什么不在输入中使用String.Format()

所以打电话:

DisplayText(String.Format("Welcome to you, {0} the {1}.", player.Name, player.Class));

String.Format()获取字符串加上其他字符串的数组(params),这些字符串分配给{0}和{1}位置。

string str = String.Format("Welcome to you, {0} the {1}.", player.Name, player.Class);
DisplayText(str);
//str = "Welcome to you, bob the greatest"

如果不这样做,您需要根据自己的要求创建一个重载DisplayText()方法。

类似的东西:

 private static void DisplayText(string message, params string[] otherStrings)
 {       
   // otherStrings will be null or contain an array of passed-in-strings 
        string str = string.Format(message, otherString);
        foreach (char c in str)
        {
            Console.Write(c);
            Thread.Sleep(25);
        }       
 }

当您为每个签名键入DisplayText();一个时,执行重载方法将为您的intellisense提供2个选项。

答案 1 :(得分:1)

在寻找我的一个答案时,我在这里提出了我的评论。 我知道这已经得到了解答,但你也可以使用 String Interpolation (C#6.0)并保持你的方法不变。

public static void DisplayText(string Default)
{
    //I have simplified the method but you get the point
    Console.WriteLine(Default);
}

class Player
{
    public string Name { get; set; }
    public string Class { get; set; }
}

public static void Main()
{
    Player player = new Player();
    player.Name = "uTeisT";
    player.Class = "Novice";

    //Passing the parameter with new feature
    //Results in more readable code and ofc no change in current method
    DisplayText($"Welcome to you, {player.Name} the {player.Class}.");
}

输出将是:

  

欢迎你,uTeisT新手。