2010-01-07 18 views
8

¿Esto es legal? ¿Contiene un error o fallo oculto? Visual Studio no da ningún error o advertencia, pero ReSharper hace:No se puede usar 'esto' en el inicializador de miembro?

/// <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> 

Respuesta

9

Estoy bastante seguro de que he oído que este es un error del compilador, fija en la próxima versión. Sólo estoy para prender mi VM 4.0, con un caso de prueba más simple:

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

obras en VS2008, pero en VS2010:

de error 1 palabra clave 'esto' no está disponible en la corriente contexto

+8

Yep. Mi error. ¡Lo siento! –

+0

Corrige la advertencia null/struct y te perdonaré ;-p –

0

Su constructor se repetirá siempre, hasta que aparezca la pila. Esto se debe a que sigue llamándose recursivamente. Intente dividirlo:

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 */ } 
Cuestiones relacionadas