我有一堆方法可以将值替换为参数化的URL,并将此URL称为WebRequest。我将其拉入实用方法
public string BuildMethodCall(string MethodName, params object[] Args)
{
... //stuff
String.Format(something, Args);
}
但我需要确保所有DateTime
个对象都以某种方式格式化。为了节省我在每个调用方法中执行此操作,我可以BuildMethodCall
以某种方式修改params元素,以便每个DateTime dt
替换为dt.ToString(format)
吗?
答案 0 :(得分:3)
params
- 数组也是一个常见的数组。您可以根据需要修改它的条目,但当然不它的引用(因为它不是out
或ref
)。
public string BuildMethodCall(string MethodName, params object[] Args)
{
... //stuff
args[0] = String.Format(something, args[0]);
}
现在,在您的调用代码中使用新值:
@params = BuildMethodCall("DoSomething", @params);
foreach(var p in @params)
{
var dt = p as DateTime?;
if(dt != null) ...
}
您甚至可以在方法中重新引用该变量:
public string BuildMethodCall(string MethodName, params object[] Args)
{
... //stuff
args = // do something
}
然而,这对调用代码完全没有影响。
编辑:尽管上面的工作并不是改变已经引入的变量的语义的最佳方法。您应该考虑只添加一个传递为out
的数组,其中包含实际的DateTime
- 实例,并保持输入值不变。
答案 1 :(得分:0)
而不是使用原始数组的猴子如何尝试以下内容?
public string BuildMethodCall(string MethodName, params object[] Args)
{
var newArgs = Args.Select(arg => arg is DateTime ? arg.ToString() : arg).ToArray();
// New array has original arguments with date time arguments string formatted...
}
答案 2 :(得分:0)
是的,您可以更改内容,但可能会导致副作用 更好的方法是使用第二个数组。 代码可能如下所示:
public string BuildMethodCall(string MethodName, params object[] Args)
{
object[] tmpArgs = new object[Args.Length];
for (int i = 0; i < Args.Length; i++)
{
if (Args[i].GetType() == typeof(DateTime))
{
tmpArgs[i] = ((DateTime)Args[i]).ToString();
}
else
tmpArgs[i] = Args[i];
}
String.Format(something, tmpArgs);
}