В.NET 3.5, существует TimeZoneInfo
, который обеспечивает большую функциональность в этой области; 2.0SP1 имеет DateTimeOffset
, но это намного более ограничено.
Получение UtcNow
и добавление фиксированного смещения является частью задания, но не осведомлено о DST.
Так в 3,5 я думаю, что можно сделать что-то как:
DateTime eastern = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
DateTime.UtcNow, "Eastern Standard Time");
, Но это просто не существует в 2,0; извините.
В вашей ситуации См. Ответ JaredPar для ситуации, когда оба вызова будут возвращать разные типы. this.GetType ()
даст тот же результат, что и MethodBase.GetCurrentMethod (). DeclaringType
делает.
В общем случае тип, представляющий член (полученный через свойство MemberInfo.ReflectedType
), и тип, объявляющий член (полученный через свойство MemberInfo.DeclaringType
) может отличаться.
ОБНОВЛЕНИЕ
Я только что профилировал его с помощью C # - this.GetType ()
требуется 2,5 нс
на вызовите while MethodBase.GetCurrentMethod (). DeclaringType
требуется 2490 нс
на вызов - так что у вас есть ускорение примерно в 1200
.
[Intel Core 2 6400 2,13 ГГц | 3,5 ГиБ | WinXP Pro SP2 | .NET FX 3.5 SP1 | Выпуск | Без отладчика]
Это зависит от ситуации. Me.GetType всегда будет возвращать фактический тип объекта. GetCurrentMethod (). DeclaringType вернет тип, в котором был объявлен метод. Эти значения могут отличаться в сценариях наследования.
Рассмотрим следующий
Class C1
Public Sub Foo()
..
End Sub
End Class
Class C2
Inherits C1
..
End Class
Внутри метода Foo два выражения были бы равны, если бы вы имели дело с экземпляром C1. Но если бы это был C2, они были бы другими.
Да, это очень разные функции. Me.GetType определяет тип среды выполнения текущего экземпляра класса. GetCurrentMethod.DeclaringType определяет, в каком типе был объявлен этот метод.
Если это критичный для производительности сценарий, тогда да, убедитесь, что вы профилируете API, которые не понимаете. Особенно те, которые предполагают рефлексию. Но только профилировщик скажет вам, что определенно быстрее. Но мои деньги на Me.GetType.