索引器中的可选参数 - 对象引用是必需的错误

时间:2013-12-14 20:39:01

标签: c# optional-parameters indexer

在我的 OverloadedIndexer 类中,我有一个名为 stringData 的私有数组字段,其大小在类构造函数中设置。我想创建一个带有可选参数的索引器。它的默认值应该是该数组中的项目数。

不幸的是,这篇文章底部的代码行引发了以下编译时错误:

非静态字段,方法或属性'OverloadedIndexer.stringData'

需要对象引用
public string this[string data, int maxOccurences = stringData.Length]

有没有办法让它发挥作用?

2 个答案:

答案 0 :(得分:3)

默认值必须是常量 - 您不能提供依赖于另一个变量的值。所以这没关系:

public string this[string data, int maxOccurences = 0]

但你得到的是无效的。不可否认,您收到的错误消息的原因略有不同,但即使您可以解决这个问题,也会遇到常量问题。

答案 1 :(得分:2)

请参阅msdn Named and Optional Arguments

  

每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是以下类型的表达式之一:

  • 一个恒定的表达;
  • 表达式为新的ValType(),其中 ValType是一个值类型,例如枚举或结构;
  • 表达 形式为default(ValType),其中ValType是值类型。