在成员初始化程序中不能使用’this’吗?

这合法吗? 它是否包含隐藏的错误或缺陷? Visual Studio不会给出任何错误或警告,但ReSharper会:

///  /// immutable tuple for two ///  public class Pair : Singleton { public TValue2 Value2 { get; private set; } public Pair(TValue1 value1, TValue2 value2, Func<Pair, String> toStringFunc) : this(value1, value2, () => toStringFunc(this)) { } //Red light }2> : Singleton 

我很确定我听说这是一个编译器错误,在下一个版本中得到修复。 我只是用更简单的测试用例来启动我的4.0 VM:

 class Foo { public Foo() : this(delegate { this.Bar(); }) { } public Foo(Action foo) {} public void Bar() {} } 

适用于VS2008,但在VS2010中:

错误1关键字’this’在当前上下文中不可用

这是在C#4中修复的C#3编译器中的错误。

编辑:
在基础构造函数中使用lambdas表达式的例子

你的构造函数将永远循环,直到它弹出堆栈。 这是因为它一直在递归地调用自己。 尝试拆分:

 public Pair(TValue1 value1, TValue2 value2) : this(value1, value2, () => toStringFunc(this)) { } public Pair(TValue1 value1, TValue2 value2, Func, String> toStringFunc) { /* some actual logic */ }