C# 无法使用';这';成员初始值设定项?
这合法吗?它是否包含隐藏的bug或缺陷?Visual studio不会给出任何错误或警告,但ReSharper会:C# 无法使用';这';成员初始值设定项?,c#,lambda,anonymous-methods,C#,Lambda,Anonymous Methods,这合法吗?它是否包含隐藏的bug或缺陷?Visual studio不会给出任何错误或警告,但ReSharper会: /// <summary> /// immutable tuple for two /// </summary> public class Pair<TValue1, TValue2> : Singleton<TValue1> { public TValue2 Value2 { get; private set; }
/// <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>
//
///二元不变元组
///
公共类对:Singleton
{
public TValue2 Value2{get;private set;}
公共对(TValue1值1、TValue2值2、Func-ToString-Func)
:this(value1,value2,()=>toStringFunc(this)){}//红灯
}2> :单身
我很确定我听说这是一个编译器错误,在下一版本中修复。我正在启动我的4.0虚拟机,使用一个更简单的测试用例:
class Foo {
public Foo() : this(delegate { this.Bar(); }) { }
public Foo(Action foo) {}
public void Bar() {}
}
在VS2008中工作,但在VS2010中:
错误1关键字“this”在当前上下文中不可用
这是C#3编译器中的一个bug,已在C#4中修复
编辑:构造函数将永远循环,直到它弹出堆栈。这是因为它不断递归地调用自己。尝试将其拆分:
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 */ }
公共对(TValue1值1,TValue2值2)
:this(value1,value2,()=>toStringFunc(this)){}
公共对(TValue1值1、TValue2值2、Func-ToString-Func)
{/*一些实际逻辑*/}
修复空/struct警告,我会原谅你-P