2010-01-07 46 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 */ } 
相關問題