代码之家  ›  专栏  ›  技术社区  ›  Maslow

无法在成员初始值设定项中使用“this”?

  •  8
  • Maslow  · 技术社区  · 15 年前

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

    /// <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>
    
    3 回复  |  直到 15 年前
        1
  •  9
  •   Marc Gravell    15 年前

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

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

    适用于VS2008,但适用于VS2010:

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

        2
  •  3
  •   Community CDub    8 年前

    这是C 3编译器中的一个错误,已在C 4中修复。

    编辑:
    Corner case in using lambdas expression in base constructor

        3
  •  0
  •   Sean Devlin    15 年前

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

    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 */ }
    
    推荐文章