Группировка по годам, затем группа за месяц со своими собственными коллекциями [duplicate]

Вот достойная функция кодирования URL для PHP ...

// From http://snipplr.com/view/22246/base62-encode--decode/
private function base_encode($val, $base=62, $chars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
    $str = '';
    do {
        $i = fmod($val, $base);
        $str = $chars[$i] . $str;
        $val = ($val - $i) / $base;
    } while($val > 0);
    return $str;
}
1
задан david.pfx 25 July 2016 в 02:11
поделиться

1 ответ

Компилятор генерирует для вас GetHashCode() и Equals() переопределения. Например, из этого кода:

class Program
{
    static void Main(string[] args)
    {
        var a = new { Text = "foo", Value = 17 };

        Console.WriteLine(a);
    }
}

Вы можете найти сгенерированный анонимный тип в скомпилированном .exe, где методы выглядят так (это вывод из dotPeek & hellip; также есть ToString()), :

  [DebuggerHidden]
  public override string ToString()
  {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.Append("{ Text = ");
    stringBuilder.Append((object) this.\u003CText\u003Ei__Field);
    stringBuilder.Append(", Value = ");
    stringBuilder.Append((object) this.\u003CValue\u003Ei__Field);
    stringBuilder.Append(" }");
    return ((object) stringBuilder).ToString();
  }

  [DebuggerHidden]
  public override bool Equals(object value)
  {
    var fAnonymousType0 = value as \u003C\u003Ef__AnonymousType0<\u003CText\u003Ej__TPar, \u003CValue\u003Ej__TPar>;
    return fAnonymousType0 != null && EqualityComparer<\u003CText\u003Ej__TPar>.Default.Equals(this.\u003CText\u003Ei__Field, fAnonymousType0.\u003CText\u003Ei__Field) && EqualityComparer<\u003CValue\u003Ej__TPar>.Default.Equals(this.\u003CValue\u003Ei__Field, fAnonymousType0.\u003CValue\u003Ei__Field);
  }

  [DebuggerHidden]
  public override int GetHashCode()
  {
    return -1521134295 * (-1521134295 * 512982588 + EqualityComparer<\u003CText\u003Ej__TPar>.Default.GetHashCode(this.\u003CText\u003Ei__Field)) + EqualityComparer<\u003CValue\u003Ej__TPar>.Default.GetHashCode(this.\u003CValue\u003Ei__Field);
  }

Связанные чтения: Как работает ToString в анонимном типе? Почему анонимные типы: Приравнивает значения по сравнению с полями? Равенство для анонимные типы Почему реализована реализация ValueType.GetHashCode () как она?

Ни один из этих вопросов не касается вашего вопроса, но они предоставляют некоторые соответствующие сведения о конкретных реализации этих переопределений.

5
ответ дан Community 16 August 2018 в 10:00
поделиться
  • 1
    Отличный ответ! Успешно справился. Ссылки (со всеми обычными подозреваемыми) были просто бонусом. Кто знал, что компилятор сделал так много? – david.pfx 25 July 2016 в 10:47
Другие вопросы по тегам:

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