8

这合法吗?它是否包含隐藏的错误或缺陷?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>
4

3 回答 3

9

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

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

在 VS2008 中工作,但在 VS2010 中:

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

于 2010-01-07T21:05:05.297 回答
3

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

编辑:
在基本构造函数中使用 lambdas 表达式的极端情况

于 2010-01-07T21:05:29.087 回答
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 */ }
于 2010-01-07T21:06:02.097 回答