将多个参数作为字符串数组传递

3
我有一个函数,它接受一个字符串数组作为参数。
public static void LogMethodStart(string[] parameters)
{
    AddLogEntry("Starting Method", parameters); //this does not work
}

public static void AddLogEntry(string[] parameters)
{ 
    using(StreamWriter sw = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), FileName), true))
    {
        foreach (string p in parameters)
        {
            stream.WriteLine(p.ToString() + DateTime.Now.ToString());
        }
    }
}

有没有一种方法可以将一个元素作为数组传递,而不必执行一些Array.resize()操作并检查是否为空等等...?


听起来你可能想要使用 params 关键字。https://dev59.com/UGsz5IYBdhLWcg3w6MNS - Craig W.
不行,它会报错,提示“无法将string[]转换为string”……可能是因为params只适用于单个对象,而不适用于集合/列表/数组。 - fifamaniac04
你不能仅仅在现有代码中添加 params 而不进行一些更改。你对你要完成的任务的描述相当模糊,所以很难比这更具体,但底线是,如果你想传递一个可变数量的参数(相同类型),则使用 params 是正确的方法。如果你解释一下你的this does not work 注释的含义,那也会很有帮助。只是简单地看一眼似乎应该没问题。 - Craig W.
@CraigW。我想要的是如何在LogMethodStart()内调用AddLogEntry()。请注意,我实际上是试图在将传递到AddLogEntry()的数组前置...我没有传递相同类型的参数,一个是数组,一个是该数组类型的对象...运行我的代码并查看您是否获得我提到的编译错误。 - fifamaniac04
@CraigW。params并不能帮助消除空值检查,因为仍然可以使用原始语法传递null(Foo((string[])null))。 - Alexei Levenkov
1个回答

9

将您的方法签名更改为以下内容:

public static void LogMethodStart(params string[] parameters)
{
    AddLogEntry("Starting Method", parameters); //this does not work
}

然后您可以以几种方式调用它:

LogMethodStart("string1","string2");
LogMethodStart(new string[] {"string1","string2"});

这两个在方法内部看起来是一样的。

编辑:

修改 LogMethodStart 的代码体:

var newParams = new List<string>(parameters);
newParams.Insert(0,"Starting Method");
AddLogEntry(newParams.ToArray());

LogMethodStart((string[])null); 则是为了让 LogMethodStart 的作者保持清醒。 - Alexei Levenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接