目前我正在开发一个依赖于Web API的应用程序。我创建了一个包含许多API字符串的类,如:/api/lol/static-data/{region}/v1/champion/{id}
。我也做了一个方法:
public static String request(String type, Object[] param)
{
return "";
}
这将是请求的东西。因为每个请求类型都有很多不同,所以使用了多少个参数,我正在使用一个数组。现在的问题是,String.Format
是否可以使用数组作为参数,而字符串中的键不是数字?或者有人知道如何以不同的方式做到这一点吗?
答案 0 :(得分:2)
不,string.Format
仅支持基于索引的参数规范。
此:
"/api/lol/static-data/{region}/v1/champion/{id}"
^^^^^^^^ ^^^^
必须使用其他方法处理,例如string.Replace
或Regex
。
您需要:
{region}
是数组的第一个元素,{id}
是第二个,等等?这是一个简单的LINQPad程序,演示 I 将如何做到(虽然我会添加更多的错误处理,如果执行此操作可能会缓存反射信息很多,一些单元测试等等):
void Main()
{
string input = "/api/lol/static-data/{region}/v1/champion/{id}";
string output = ReplaceArguments(input, new
{
region = "Europe",
id = 42
});
output.Dump();
}
public static string ReplaceArguments(string input, object arguments)
{
if (arguments == null || input == null)
return input;
var argumentsType = arguments.GetType();
var re = new Regex(@"\{(?<name>[^}]+)\}");
return re.Replace(input, match =>
{
var pi = argumentsType.GetProperty(match.Groups["name"].Value);
if (pi == null)
return match.Value;
return (pi.GetValue(arguments) ?? string.Empty).ToString();
});
}