Given this code:
public class Auxiliar2
{
    public IEnumerable<char> PercorreCaracteres(char start, char end)
    {
        if ((start < 'a') || (start > 'z'))
        {
            throw new ArgumentOutOfRangeException(nameof(start), "Carácter início incorreto.");
        }
        if ((end < 'a') || (end > 'z'))
        {
            throw new ArgumentOutOfRangeException(nameof(end), "Carácter final incorreto.");
        }
        if (end <= start)
        {
            throw new ArgumentException($"{nameof(end)} não pode ser inferior a {nameof(start)}");
        }
        return Cria();
        IEnumerable<char> Cria()
        {
            for (var c = start; c < end; c++)
                yield return c;
        }
    }
}
The decompilation for 
.NET 1.0 / C# 1 / VB 7 is correct:
public class Auxiliar2
{
    // Methods
    public IEnumerable<char> PercorreCaracteres(char start, char end)
    {
        <>c__DisplayClass0_0 class_ = new <>c__DisplayClass0_0();
        class_.start = start;
        class_.end = end;
        if ((class_.start < 'a') || (class_.start > 'z'))
        {
            throw new ArgumentOutOfRangeException("start", "Car\x00e1cter in\x00edcio incorreto.");
        }
        if ((class_.end < 'a') || (class_.end > 'z'))
        {
            throw new ArgumentOutOfRangeException("end", "Car\x00e1cter final incorreto.");
        }
        if (class_.end <= class_.start)
        {
            throw new ArgumentException(string.Format("{0} n\x00e3o pode ser inferior a {1}", "end", "start"));
        }
        return class_.<PercorreCaracteres>g__Cria0();
    }
}
But not for versions above that:
public class Auxiliar2
{
    // Methods
    public IEnumerable<char> PercorreCaracteres(char start, char end)
    {
        <>c__DisplayClass0_0 class_;
        if ((start < 'a') || (start > 'z'))
        {
            throw new ArgumentOutOfRangeException("start", "Car\x00e1cter in\x00edcio incorreto.");
        }
        if ((end < 'a') || (end > 'z'))
        {
            throw new ArgumentOutOfRangeException("end", "Car\x00e1cter final incorreto.");
        }
        if (end <= start)
        {
            throw new ArgumentException(string.Format("{0} n\x00e3o pode ser inferior a {1}", "end", "start"));
        }
        return class_.<PercorreCaracteres>g__Cria0();
    }
}
The code setting the fields of 
class_ is missing.
      
 
      
      
      
      
      
      
        
      
      
      
        
        
        
      
     
  
public class Auxiliar2 { public IEnumerable<char> PercorreCaracteres(char start, char end) { if ((start < 'a') || (start > 'z')) { throw new ArgumentOutOfRangeException(nameof(start), "Carácter início incorreto."); } if ((end < 'a') || (end > 'z')) { throw new ArgumentOutOfRangeException(nameof(end), "Carácter final incorreto."); } if (end <= start) { throw new ArgumentException($"{nameof(end)} não pode ser inferior a {nameof(start)}"); } return Cria(); IEnumerable<char> Cria() { for (var c = start; c < end; c++) yield return c; } } }The decompilation for .NET 1.0 / C# 1 / VB 7 is correct:
public class Auxiliar2 { // Methods public IEnumerable<char> PercorreCaracteres(char start, char end) { <>c__DisplayClass0_0 class_ = new <>c__DisplayClass0_0(); class_.start = start; class_.end = end; if ((class_.start < 'a') || (class_.start > 'z')) { throw new ArgumentOutOfRangeException("start", "Car\x00e1cter in\x00edcio incorreto."); } if ((class_.end < 'a') || (class_.end > 'z')) { throw new ArgumentOutOfRangeException("end", "Car\x00e1cter final incorreto."); } if (class_.end <= class_.start) { throw new ArgumentException(string.Format("{0} n\x00e3o pode ser inferior a {1}", "end", "start")); } return class_.<PercorreCaracteres>g__Cria0(); } }But not for versions above that:
public class Auxiliar2 { // Methods public IEnumerable<char> PercorreCaracteres(char start, char end) { <>c__DisplayClass0_0 class_; if ((start < 'a') || (start > 'z')) { throw new ArgumentOutOfRangeException("start", "Car\x00e1cter in\x00edcio incorreto."); } if ((end < 'a') || (end > 'z')) { throw new ArgumentOutOfRangeException("end", "Car\x00e1cter final incorreto."); } if (end <= start) { throw new ArgumentException(string.Format("{0} n\x00e3o pode ser inferior a {1}", "end", "start")); } return class_.<PercorreCaracteres>g__Cria0(); } }The code setting the fields of class_ is missing.