c#扩展方法来定义行为类似于静态类/类型方法的方法,而不是实例方法

问题描述

我在一个类中有这个静态方法

public class MyTimeZoneHelperClass {

        public static TimeZoneInfo EST = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

        public static DateTime Convert_UTC_to_EST(this DateTime utcDateTime)
        {
            return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime,EST);
        }

        public static DateTime NowEST()
        {
            return DateTime.UtcNow.Convert_UTC_to_EST();
        }
}

我刚刚去写了一个扩展方法,例如我要命名为“ EstNow”的DateTime TYPE,所以我可以使用DateTime.EstNow,就像这段代码使用DateTime.UtcNow一样。如果我有了它,我就不必在上面引用此静态类-MyTimeZoneHelperClass.NowEst-我的代码会更简洁一些,我不必记住该类名/我更喜欢这里的一个类而不是两个

所以扩展方法不能那样工作。它们是静态方法,但是您需要一个he类的实例来调用方法-duh!

这可能吗?我可以(最好是轻松地)让编译器识别类型上的新的/自定义静态方法吗?

解决方法

否,您不能编写“静态扩展”成员来扩展类型而不是类型实例。它不是C#的一部分。它已经被讨论了,将来可能会发生,尽管我不认为它在C#9的预期功能列表中。

,

我们所说的c#github上有一个未解决的问题:https://github.com/dotnet/csharplang/issues/2505

打开表示尚未实现。总结一下:

  1. 没有解决方法,没有什么尝试可以减轻缺少的功能
  2. 目前似乎没有兴趣实施此操作

ldm上没有人认为这值得一提。