2016-08-19 6 views
0

Я получил этот код здесь, который принимает строковый параметр:C# проходя необязательный параметр типа объекта

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); 

Но мне также нужно иметь возможность устанавливать только строковый параметр с параметрами объекта с возможностью NULL. Я пробовал этот код здесь:

Я пробовал использовать нулевую <> но это меня нигде не было.

Теперь, любые указатели?

+1

Как насчет взгляда на документацию? Дополнительные аргументы: https://msdn.microsoft.com/en-us/library/dd264739.aspx – CrudaLilium

+1

Похоже, вы можете использовать параметры _Optional_. https://msdn.microsoft.com/en-us/library/dd264739.aspx * Редактировать: @CrudaLilium Вы избили меня там :) – uTeisT

+0

Я всегда теряюсь, читаю документацию, но спасибо за ссылку :) – Maxwell

ответ

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 начинающему пользователю.

+0

Эй, спасибо, мне нравится, что лучше на самом деле, я все для чистого кода! :) – Maxwell

+0

@SirMaxwell Ну, по крайней мере, дайте мне upvote: p – uTeisT

+0

Да, извините, всегда забывайте, что, глупо меня lol – Maxwell

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); 
     }  
} 

Выполнение метода перегрузки даст вам 2 варианта в вашем IntelliSense при вводе DisplayText(); по одному для каждой из подписей.

+0

Спасибо, теперь это работает! – Maxwell

+0

Отлично, пожалуйста, отметьте его как ответ, если это помогло :) – Darren

+0

Прокомментировал это, я все здесь, здесь lol – Maxwell

Смежные вопросы