如何在C#中实现扩展方法?

时间:2012-08-23 09:50:32

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

我在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);
}

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

感谢

1 个答案:

答案 0 :(得分: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();

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