【问题标题】:How to implement extension methods in C#?如何在 C# 中实现扩展方法?
【发布时间】:2012-08-23 09:50:32
【问题描述】:

我在Here 中找到了一个主题,该主题是关于如何从 MVC 中的枚举创建下拉列表。 这是该主题的答案:

Martin Faartoft 说:

我将 Rune 的答案滚动到一个扩展方法中:

public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
  var values = from TEnum e in Enum.GetValues(typeof(TEnum))
               select new { Id = e, Name = e.ToString() };

  return new SelectList(values, "Id", "Name", enumObj);
}

我确实需要这样做,但它使用了扩展方法,我不知道它是什么以及如何实现它。 那么任何人都可以帮助我让这段代码正常工作吗? 我需要知道什么是扩展方法以及如何实现它们。

谢谢

【问题讨论】:

标签: asp.net-mvc-3 extension-methods html.dropdownlistfor


【解决方案1】:

扩展方法是具有一个或多个参数的static 类的成员,其中第一个参数必须使用this 关键字作为代码示例中的属性。

从那时起,您可以在给定类型的任何实例上使用扩展方法,只要将包含该类的命名空间添加为using 语句。

包含扩展方法的类的示例:

public static class ExtensionMethods
{
    public static string Reverse(this string source)
    {
        string result = String.Empty;
        for (int i = 0; i < source.Length; i++)
            result = source.Substring(i, 1) + result;

        return result;
    }
}

像这样使用这个扩展方法

string toBeReversed = "Hello World";
string reversed = toBeReversed.Reverse();

重点是向现有类型添加功能,而无需实际继承它。使用扩展方法,您可以将新功能“附加”到任何给定类型,而无需实际更改它。

【讨论】:

  • 我的评论不是关于扩展方法,而是关于反向功能。切勿通过字符串执行此类功能。对循环内的字符串使用 StringBuilder。
  • 谢谢哥们。我会试一试,看看它是否适合我;)
  • @KirillBestemyanov:我知道 :-) 通常我也会这样做,但只是为了演示,我认为它可能没问题。
  • 它工作了 ;) 我有点明白它是如何工作的 :D 谢谢 Thorsten Dittmar!
猜你喜欢
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多