2010-08-20 5 views
4
string.Format("{0}, {1}, {2}", var1, var2, var3) 

Я хочу применить кодировку URL для каждого из var1, var2 и var3. Это не массив, поэтому я не могу использовать Linq Aggregate для этого.C# Применение одной и той же функции для разных переменных

Любые идеи?

Мне бы очень хотелось разместить скобки вокруг каждой переменной.

+1

Если это не массив, что это? –

ответ

7

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

var args = new[] { var1, var2, var3 }; 
Array.ConvertAll(args, UrlEncode); 
var result = string Format("{0}, {1}, {2}", args); 

или

var args = new[] { var1, var2, var3 }; 
var result = string Format("{0}, {1}, {2}", args.Select(UrlEncode).ToArray()); 

или, если все, что вы хотите сделать, это положить запятые между элементами:

var result = string.Join(", ", new[] { var1, var2, var3 }.Select(UrlEncode)); 

Использование вспомогательной функции:

var result = string.Format("{0}, {1}, {2}", UrlEncodeAll(var1, var2, var3)); 

или

var result = string.Join(", ", UrlEncodeAll(var1, var2, var3)); 

где

string[] UrlEncodeAll(params string[] args) 
{ 
    Array.ConvertAll(args, UrlEncode); 
    return args; 
} 
+0

+1 Действительно приятно. –

1
void EncodeAndFormat(string format, params object[] args) 
{ 
    return string.Format(format, 
      args.Select(obj=>HttpUtility.UrlEncode(obj.ToString()).ToArray()); 
} 


EncodeAndFormat("{0}, {1}, {2}", var1, var2, var3) 
Смежные вопросы