.net 4 string []参数默认值设置

时间:2010-09-10 07:36:07

标签: c# .net .net-4.0

我想这样做:

public int Insert(object o, string[] ignore = new string[] {"Id"})

但它告诉我,我不能这样做? 为什么会这样?

4 个答案:

答案 0 :(得分:9)

问题是默认参数必须是常量。在这里,您将动态分配一个数组。与声明const变量一样,对于引用类型,仅支持字符串文字和空值。

您可以使用以下模式

来实现此目的
public int Insert(object o, string[] ignore = null)
{
  if (ignore == null) ignore = new string[] { "Id" };
  ...
  return 0;
}

现在,当调用者在调用站点排除参数时,编译器将传递值null,然后您可以根据需要处理它。请注意,jsut保持简单我已经修改了函数中参数的值,通常不被认为是良好的实践,但我相信在这种情况下这可能没问题。

答案 1 :(得分:6)

引用类型唯一可用的缺省值是null(除了字符串也接受文字),因为它必须在编译时可用。

答案 2 :(得分:3)

最简单的解决方案是使用.Net 1.1方式:

public int Insert(object o)
{
    return Insert(o, new String[] { "Id" });
}


public int Insert(object o, String[] s)
{
    // do stuff
}

答案 3 :(得分:0)

由于这是一个数组,为什么不使用params

public int Insert(object o, params string[] ignore)
{
    if (ignore == null || ignore.Length == 0)
    {
        ignore = new string[] { "Id" };
    }
    ...

然后你可以这样称呼它:

Insert(obj);

Insert(obj, "str");

Insert(obj, "str1", "str2");