2010-01-07 31 views
8

这是合法的吗?它是否包含隐藏的缺陷或缺陷? Visual Studio中没有给出任何错误或警告,但ReSharper的作用:在成员初始值设定项中不能使用'this'?

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

}2> : Singleton<TValue1> 

回答

9

我敢肯定,我听说这是一个编译器错误,固定在下一版本中。我只是发射了我的4.0虚拟机,用一个简单的测试用例:

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

作品在VS2008,但VS2010:

错误1个关键字“这个”不在当前可用上下文

+8

是的。我的错。抱歉! –

+0

修复null/struct警告,我会原谅你;-p –

0

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

public Pair(TValue1 value1, TValue2 value2) 
    : this(value1, value2,() => toStringFunc(this)) { } 

public Pair(TValue1 value1, TValue2 value2, Func<Pair<TValue1, TValue2>, String> toStringFunc) 
    { /* some actual logic */ } 
相关问题