C#将相同的函数应用于不同的变量

时间:2010-08-20 20:21:08

标签: c# linq

string.Format("{0}, {1}, {2}", var1, var2, var3)

我想对var1,var2和var3中的每一个应用URL编码。它不是一个数组,所以我不能使用Linq Aggregate来实现它。

有什么想法吗?

我不想在每个变量周围加上括号。

2 个答案:

答案 0 :(得分: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;
}

答案 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)