Как читать имена методов c #, преобразованные в ToString () [duplicate]

Используйте функцию df.rename() и обратитесь к столбцам, которые нужно переименовать. Не все столбцы необходимо переименовать:

df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy) 
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

25
задан sharptooth 7 May 2013 в 06:54
поделиться

3 ответа

Вы просматриваете какой-то декомпилированный код - в частности, то, что было создано компилятором.

Компилятор использует <> (это деталь реализации), поскольку он действителен для CLR идентификатор для начала с такими символами, он недействителен в C # - поэтому гарантируется, что имя не будет конфликтовать с любыми именами в коде C #.

почему компилятор сгенерировал это код меняется - это может быть реализация лямбда или итератора или асинхронного блока и, возможно, некоторые другие причины.


И, надеюсь, на другую часть вашего вопроса также ответят - есть a . перед ним по обычным причинам - отделить части пространства имен или, более вероятно, в этом случае отделить имя вложенного класса от имени охватывающего класса.

32
ответ дан Damien_The_Unbeliever 27 August 2018 в 13:00
поделиться

Используйте этот ответ Эрика Липперта для декодирования имен, таких как <>c__DisplayClass0. Согласно таблице, приведенной в ответе, вы смотрите на класс анонимного метода закрытия. Не полагайтесь на то, что это всегда будет правдой в будущем, это детали реализации, подлежащие изменению в любое время.

9
ответ дан Community 27 August 2018 в 13:00
поделиться

Как указывали другие, вы видите имя, сгенерированное компилятором, который намеренно не юридический C #, так что никто не может случайно (или преднамеренно!) вызывать имя конфликт.

Причина, по которой генерируется это имя, состоит в том, что:

class C
{
  void M()
  {
    int x = 1;
    Func<int, int> f = y=>x+y;
  }  
}

Сгенерировано компилятором, как если бы вы написали:

class C
{
  private class DisplayClass
  {
    public int x;
    public int AnonymousMethod(int y)
    { 
      return this.x + y;
    }
  }
  void M()
  {
    C.DisplayClass d = new C.DisplayClass();
    d.x = 1;
    Func<int, int> f = d.AnonymousMethod;
  }
}

За исключением что, конечно, все имена намеренно искалечены, как вы обнаружили.

Причина, по которой класс закрытия называется «DisplayClass», немного неудачна: это жаргон, используемый командой отладчика для описания класса, который имеет особое поведение при отображении в отладчике. Очевидно, что мы не хотим отображать «x» в качестве поля класса с невозможным именем при отладке вашего кода; скорее, вы хотите, чтобы он выглядел как любая другая локальная переменная. В отладчике есть специальная передача для обработки этого класса отображения. Вероятно, это, вероятно, должно было называться «ClosureClass», чтобы было легче читать разборку.

28
ответ дан Eric Lippert 27 August 2018 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: