这是我代码的一个简化版本:
void Foo(params object[] args)
{
Bar(string.Format("Some {0} text {1} here {2}", /* I want to send args */);
}
string.Format
要求用 params
传递参数。有没有办法将 args
集合转换为 string.Format
方法的参数?
这是我代码的一个简化版本:
void Foo(params object[] args)
{
Bar(string.Format("Some {0} text {1} here {2}", /* I want to send args */);
}
string.Format
要求用 params
传递参数。有没有办法将 args
集合转换为 string.Format
方法的参数?
params
关键字只是一种“语法糖”,它允许你使用任意数量的参数调用这样的方法。然而,这些参数总是作为一个数组传递给该方法。Foo(123, "hello", DateTime.Now)
等同于 Foo(new object[] { 123, "hello", DateTime.Now })
。Foo
的参数传递给 string.Format
,像这样:void Foo(params object[] args)
{
Bar(string.Format("Some {0} text {1} here {2}", args));
}
然而,在这种情况下,你需要三个参数(因为在你的格式中有{0}、{1}和{2})。因此,你应该将你的代码更改为:
void Foo(object arg0, object arg1, object arg2)
{
Bar(string.Format("Some {0} text {1} here {2}", arg0, arg1, arg2));
}
或者按照Marcelo的建议进行操作。
Bar(string.Format("Some {0} text {1} here {2}", args));
void Foo(params object[] args)
{
List<string> argStrings = new List<string>();
foreach (object arg in args)
{
if (args.GetType().Name == typeof(String).Name)
{
argStrings.Add((string)arg);
}
else if (args.GetType().Name == typeof(DateTime).Name)
{
DateTime dateArg = (DateTime)arg;
argStrings.Add(dateArg.ToShortDateString());
}
else
{
argStrings.Add(arg.ToString());
}
}
Bar(string.Format("Some {0} text {1} here {2}", argStrings.ToArray()));
}
if (arg is DateTime)
等即可。 - Ilya Kogan
params string[] args
。 除此之外,你可以将它作为普通数组传递。params
只是一个编译器关键字,用于从发送的参数构建数组。 - HuBeZavoid Foo(params args[])
。我需要休假 :) - HuBeZa