سؤال

هل سيساعدني شخص لطيف في فرز إخراج .NET Reflector v6.5 الذي لا يتجمع؟ أعتقد أن الرموز خارج عن الضرب ولكن البحث العالمي واستبداله قد يصلح ذلك. لا أحصل على تعريف الفئة الفردية. أفكار؟

    [CompilerGenerated]
    private sealed class <ApplicationTaskIterator>d__0 : IEnumerable<ApplicationTask>, IEnumerable, IEnumerator<ApplicationTask>, IEnumerator, IDisposable
    {
        private int <>1__state;
        private ApplicationTask <>2__current;
        public SessionMetrics <>3__sm;
        public Dictionary<int, ThreadMetrics> <>7__wrap3;
        public Dictionary<int, ThreadMetrics>.ValueCollection.Enumerator <>7__wrap4;
        public ApplicationTask <currentTask>5__1;
        public ThreadMetrics <tm>5__2;
        public SessionMetrics sm;

        [DebuggerHidden]
        public <ApplicationTaskIterator>d__0(int <>1__state)
        {
            this.<>1__state = <>1__state;
        }

        private bool MoveNext()
        {
            try
            {
                switch (this.<>1__state)
                {
                    case 0:
                        this.<>1__state = -1;
                        Monitor.Enter(this.<>7__wrap3 = ThreadMetrics._allThreadMetrics);
                        this.<>1__state = 1;
                        this.<>7__wrap4 = ThreadMetrics._allThreadMetrics.Values.GetEnumerator();
                        this.<>1__state = 2;
                        while (this.<>7__wrap4.MoveNext())
                        {
                            this.<tm>5__2 = this.<>7__wrap4.Current;
                            if ((((this.<tm>5__2._managedThread.ThreadState == System.Threading.ThreadState.Stopped) || object.ReferenceEquals(this.<tm>5__2._managedThread, Thread.CurrentThread)) || ((this.<currentTask>5__1 = this.<tm>5__2.CurrentApplicationTask) == null)) || ((this.sm != null) && !this.<currentTask>5__1.CurrentSessionMetrics.SessionGUID.Equals(this.sm.SessionGUID)))
                            {
                                continue;
                            }
                            this.<currentTask>5__1.Active = !this.<tm>5__2.Suspended;
                            this.<>2__current = this.<currentTask>5__1;
                            this.<>1__state = 3;
                            return true;
                        Label_010C:
                            this.<>1__state = 2;
                        }
                        this.<>1__state = 1;
                        this.<>7__wrap4.Dispose();
                        this.<>1__state = -1;
                        Monitor.Exit(this.<>7__wrap3);
                        break;

                    case 3:
                        goto Label_010C;
                }
                return false;
            }
            fault
            {
                ((IDisposable) this).Dispose();
            }
        }
    }

تستخدم مثل هذا:

    internal static IEnumerable<ApplicationTask> ApplicationTaskIterator(SessionMetrics sm)
    {
        return new <ApplicationTaskIterator>d__0(-2) { <>3__sm = sm };
    }
هل كانت مفيدة؟

المحلول

هذا ببساطة ما يحوله برنامج التحويل البرمجي C# طريقة تحتوي yield return بيانات ل.

إذا كنت ترغب في إجراء تجميع الكود ، فيمكنك إما محاولة فك تشفير ما تفعله الطريقة وإعادة إنشاء الإصدار الأصلي بـ yield return صياغات؛ أو يمكنك إعادة تسمية الفصل وجميع الأعضاء إلى أسماء C# صالحة.


ربما تبدو الطريقة الأصلية هكذا:

internal static IEnumerable<ApplicationTask> ApplicationTaskIterator(SessionMetrics sm)
{
    lock (ThreadMetrics._allThreadMetrics)
    {
        foreach (var tm in ThreadMetrics._allThreadMetrics.Values)
        {
            if (tm._managedThread.ThreadState != ThreadState.Stopped)
            {
                if (!object.ReferenceEquals(tm._managedThread, Thread.CurrentThread))
                {
                    ApplicationTask currentTask;
                    if ((currentTask = tm.CurrentApplicationTask) != null)
                    {
                        if (sm == null || !currentTask.CurrentSessionMetrics.SessionGUID.Equals(sm.SessionGUID))
                        {
                            currentTask.Active = !tm.Suspended;
                            yield return currentTask;
                        }
                    }
                }
            }
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top