拓展方法(Extension Methods)是 C# 3.0 引入的一种特性,允许 在不修改原有类型代码的情况下,为现有类型(包括类、结构体、接口等)添加新的方法。
sealed
类(无法继承的类)。this
关键字,指定要拓展的类型。this
参数。string
类型添加 ToInt
方法csharpusing System;
public static class StringExtensions
{
public static int ToInt(this string str)
{
int result;
return int.TryParse(str, out result) ? result : 0;
}
}
class Program
{
static void Main()
{
string number = "123";
int intValue = number.ToInt();
Console.WriteLine(intValue); // 输出:123
}
}
csharpstring text = "100";
int value = text.ToInt();
csharpint value = StringExtensions.ToInt("100");
List<T>
类型的方法(洗牌算法)csharpusing System;
using System.Collections.Generic;
public static class ListExtensions
{
private static Random random = new Random();
public static void Shuffle<T>(this List<T> list)
{
int n = list.Count;
for (int i = 0; i < n; i++)
{
int j = random.Next(i, n);
(list[i], list[j]) = (list[j], list[i]);
}
}
}
DateTime
类型的方法(计算年龄)csharpusing System;
public static class DateTimeExtensions
{
public static int GetAge(this DateTime birthDate)
{
var today = DateTime.Today;
int age = today.Year - birthDate.Year;
if (birthDate > today.AddYears(-age)) age--;
return age;
}
}
Enum
类型的方法(获取描述)csharpusing System;
using System.ComponentModel;
public static class EnumExtensions
{
public static string GetDescription(this Enum value)
{
var field = value.GetType().GetField(value.ToString());
var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
return attribute?.Description ?? value.ToString();
}
}
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!