2016-05-17 4 views
1

Знаете ли вы еще один правильный способ сделать то же самое?Строковый формат с использованием

string initialTemplate = "{0}-{1}"; 
string template = string.Format(initialTemplate, "first", "{0}"); 
string answer = string.Format(template, "second"); 

Также следующим образом фактически известно, но в моем нынешнем случае unfortunatelyI не может использовать этот метод (я думаю, что это путь более правильным и логика более ясно):

string initialTemplate = "{0}-{{0}}"; 
string template = string.Format(initialTemplate, "first"); 
string answer = string.Format(template, "second"); 

Может быть есть еще один намек, как это сделать?

ОБНОВЛЕНИЕ Мне очень жаль, но из ваших ответов Я узнал, что мой вопрос недостаточно ясен. Поэтому я добавил немного больше описания.

Моя ситуация:

//that template is actually placed in *.resx file 
//I want storing only one template and use that in different situations 
public const string InitialTemplate = "{0}-{1}"; 

public static string GetMessage(string one, string two) 
{ 
    return string.Format(InitialTemplate, one, two); 
} 

public static string GetTemplate(string one) 
{ 
    return string.Format(InitialTemplate, one, "{0}"); 
} 

//or morew universal way 
public static string GetTemplate(params object[] args) 
{ 
    return string.Format(InitialTemplate, args, "{0}"); 
} 

static void Main(string[] args) 
{ 
    //in almost all cases in my project i need to use string.format like this 
    string message = GetMessage("one", "two"); 

    //but there is another way where i have to use 
    //the template have already been assigned first argument 
    //the result must be "one-{0}" 
    string getTemplateWithAssignedFirstArg = GetTemplate("one"); 
} 

Вы знаете, более правильный путь для такого рода ситуации?

+1

Почему вы не можете использовать этот второй метод? У вас нет доступа для записи к 'initialTemplate'? – dfoverdx

ответ

1

String.Format является очень полезным удобством, но я бы с осторожностью использовать его для создания строки форматирования, которые вы собираетесь использовать для создания других строк формата. Кто-то пытается сохранить этот код, выяснить, что происходит, и, возможно, изменить его, будет озадачен. Используя метод String.Format, этот способ технически возможен, и там могут быть даже сценарии, где это полезно, но это, вероятно, приведет к чему-то, что работает, но его очень сложно понять и отладить.

Моим первым предложением было бы использовать StringBuilder. Даже если вы добавляете к StringBuilder, вы можете использовать String.Format, если необходимо, для создания отдельных строк.

Интересно, возможно, что то, что вы описываете в вопросе, происходит по нескольким методам (именно поэтому вы можете создавать свою строку формата в шагах.) Если это так, я рекомендую не создавать строку в таких шагах , На самом деле не начинайте строить строку до тех пор, пока у вас не будут все необходимые данные вместе, а затем создайте строку сразу.

3
string initialTemplate = "{0}-{1}"; 
string answer = string.Format(initialTemplate, "first", "second"); 

Должен сделать трюк. Или вырежьте среднего человека с:

string answer = string.Format("{0}-{1}", "first", "second"); 
Смежные вопросы