【问题标题】:Can I change an extension method into a property? [duplicate]我可以将扩展方法更改为属性吗? [复制]
【发布时间】:2012-10-18 13:45:37
【问题描述】:

可能重复:
Does C# have extension properties?

我有以下几点:

 public static class EnumExt
    {
        public static string D2(this Enum key)
        {
            return Convert.ToInt32(key).ToString("D2");
        }
    }

我是这样使用的:

PageType.ContentBlock.D2()

其中 PageType 是一个枚举。

有没有办法让 D2 成为属性而不是方法?我总是必须将 () 放在 D2 之后,这对我来说似乎没有多大意义?

【问题讨论】:

  • 我一直在寻找这个问题的答案,但我发现答案是否定的。我希望我错了,有办法。
  • 不——你不能。目前 C# 将不支持您的要求。
  • 所以你问这个只是因为你懒得加括号?你曾经考虑过如何使用 VB.Net,你可以用它为自己节省很多字符! (捂脸)

标签: c#


【解决方案1】:

不,这就是为什么它被称为扩展方法。如果不需要其他参数(如var x = y.ExtensionMethod();),它可能看起来可以转换为属性,但扩展方法可以采用其他参数。示例:

int y = x.Add(3);

public static int Add(this int source, int value)
{
    return source + value;
}

此外,扩展方法只是“语法糖”。编译器将它们转换为普通的方法调用,并将源对象作为参数传递。

示例(扩展方法在类ExtensionMethods中):

int y = x.Add(3);

将转换为

int y = ExtensionMethods.Add(x, 3);

由编译器。

【讨论】:

    【解决方案2】:

    嗯,你有一个参数:this Enum key

    即使用法“看起来像”一个属性,也要提醒

    PageType.ContentBlock.D2();
    

    等价于

    EnumExt.D2(PageType.ContentBlock);
    

    所以,当你需要一个参数时,使用...一个方法!

    Does C# have extension properties?

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 2014-03-18
      • 1970-01-01
      • 2019-06-27
      • 2011-11-21
      • 2021-12-25
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多