请找到代码有错误,getenuemrator()方法未在类
中定义private sealed class SelfAndBaseClasses : IEnumerable<Type>, IEnumerator<Type>, IEnumerable, IEnumerator, IDisposable
{
private int state;
private Type current;
public Type type;
private int initialThreadId;
//public Type type;
[DebuggerHidden]
public SelfAndBaseClasses(int state)
{
this.state = state;
this.initialThreadId = Thread.CurrentThread.ManagedThreadId;
}
private bool MoveNext()
{
switch (this.state)
{
case 0:
this.state = -1;
break;
case 1:
this.state = -1;
this.type = this.type.BaseType;
break;
default:
goto Label_0055;
}
if (this.type != null)
{
this.current = this.type;
this.state = 1;
return true;
}
Label_0055:
return false;
}
[DebuggerHidden]
IEnumerator<Type> IEnumerable<Type>.GetEnumerator()
{
ExpressionParser.SelfAndBaseClasses d;
if ((Thread.CurrentThread.ManagedThreadId == this.initialThreadId) && (this.state == -2))
{
this.state = 0;
d = this;
}
else
{
d = new ExpressionParser.SelfAndBaseClasses(0);
}
d.type = this.type;
return d;
}
[DebuggerHidden]
IEnumerator IEnumerable.GetEnumerator()
{
return this.System.Collections.Generic.IEnumerable<System.Type>.GetEnumerator();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
void IDisposable.Dispose()
{
}
Type IEnumerator<Type>.Current
{
[DebuggerHidden]
get
{
return this.current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return this.current;
}
}
}
答案 0 :(得分:2)
好吧,既然您明确地实现了两个 GetEnumerator
方法,那么您可以这样做:
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<Type>)this).GetEnumerator();
}
但我有两个问题:
return this.System.Collections.Generic.IEnumerable<Foo>.GetEnumerator();
编辑: 您需要进行编译的其他修复程序似乎是:
MoveNext
方法的辅助功能更改为public
。 ExpressionParser.
方法中删除GetEnumerator
的提及。 您可以在Ideone上尝试。
foreach (Type t in new SelfAndBaseClasses(0) { type = typeof(string) })
Console.WriteLine(t);
输出:
System.String
System.Object
如果您能够更好地解释真正想要做什么,我们可以更好地帮助您。修复错误反编译的代码并不好玩。例如,如果您需要为类型层次结构编写枚举器,那么使用迭代器块更容易很多,而不会遇到反编译动态LINQ的麻烦。