Введение С тех пор, как я начал использовать методы расширения, я не мог перестать их использовать. Они значительно повысили эффективность написания моего кода, и теперь я стал сильно зависеть от них. Я хотел бы поделиться своим часто используемым методом расширения, установленным здесь для всеобщего удобства.
(Некоторые из них заимствованы или заимствованы из статей других блоггеров. Я хотел бы особенно поблагодарить Хэ Чунтяна за его многочисленные публикации)
Исходный код предоставлен в конце статьи.
Пример
общедоступная статическая строка ExpandAndToString (это System.Collections.IEnumerable s, символ-разделитель строки)
Функция: разверните коллекцию и выполните метод ToString соответственно, а затем соедините их с указанным разделителем, чтобы объединить их в строку.
пример:
[Тестовый метод]
публичный недействительный TestMethod1()
{
вар я = новый int [] {1,5,33,14,556};
вар Out="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
public static bool IsNullOrEmpty (эта строка s)
Функция: проверьте, является ли строковый объект пустым объектом или пустой строкой.
пример:
[Тестовый метод]
публичный недействительный TestMethod2()
{
строка с = ноль;
Assert.AreEqual(true,s.IsNullOrEmpty());
с += "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
}
общедоступная статическая строка IsNullOrEmptyThen (эта строка s, выражение System.Func<string,string>)
Функция: проверьте, является ли строковый объект пустым объектом или пустой строкой. Если да, выполните входящее выражение и верните результат выражения.
пример:
[Тестовый метод]
публичный недействительный TestMethod3()
{
варс = "";
вар Out = "1234";
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
}
public static void IsNullOrEmptyThen(эта строка s, выражение System.Action<string>)
Функция: проверьте, является ли строковый объект пустым объектом или пустой строкой, и если да, выполните входящее выражение.
пример:
[Тестовый метод]
общественный недействительный TestMethod4()
{
варс = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("Нет содержимого");
}
общедоступная статическая строка FormatWith (параметры формата этой строки s, params object[])
общедоступная статическая строка FormatWith (эта строка s, параметр формата объекта 1)
общедоступная статическая строка FormatWith (эта строка s, параметр формата объекта 1, параметр формата объекта 2)
общедоступная статическая строка FormatWith (эта строка s, параметр формата объекта 1, параметр формата объекта 2, параметр формата объекта 3)
Функция: форматировать строку.
пример:
[Тестовый метод]
публичный недействительный TestMethod5()
{
вар я = 0,35;
вар х = 200;
var Out = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
}
public static bool In<T>(это T t, основа оценки параметров T[])
Функция: Определить, находится ли текущий объект во входящем массиве.
пример:
[Тестовый метод]
публичный недействительный TestMethod6()
{
вар я = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
public static bool In<T, C>(это выражение оценки T t, System.Func<T,C,bool>, основа оценки параметров C[])
Функция: определить, находится ли текущий объект во входящем массиве. Метод оценки определяется входным выражением.
пример:
[Тестовый метод]
публичный недействительный TestMethod7()
{
вар я = 95;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4 "));
}
public static bool InRange<T>(это System.IComparable<T> t, минимальное значение T, максимальное значение T)
public static bool InRange(это System.IComparable t, минимальное значение объекта, максимальное значение объекта)
Функция: Определить, находится ли текущее значение в указанном диапазоне.
пример:
[Тестовый метод]
публичный недействительный TestMethod8()
{
вар я = 95;
Assert.IsTrue(i.InRange(15, 100));
Assert.IsTrue(i.InRange(-3000, 300));
Assert.IsFalse(i.InRange(-1, 50));
варс = "б";
Assert.IsTrue(s.InRange("a", "c"));
Assert.IsTrue(s.InRange("1", "z"));
Assert.IsFalse(s.InRange("e", "h"));
}
общедоступный статический T Trace<T>(это T t)
public static T Trace<T>(это T t, строковая классификация)
public static T Trace<T>(это выражение T t, System.Func<T,object>)
public static T Trace<T>(это выражение T t, System.Func<T,object>, строковая классификация)
Функция: выведите значение текущего объекта в окно вывода Visual Studio и верните исходный объект. Эта функция используется только для облегчения отладки. Значения могут выводиться на любом этапе цепочки методов без какого-либо влияния на непрерывность цепочки методов.
пример:
[Тестовый метод]
публичный недействительный TestMethod9()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "режим выражения").Remove(4).Trace("нормальный режим");
вар Out = "abcd";
Assert.AreEqual(Выход, с);
//Выходное содержимое следующее:
//Шаблон выражения: ABCDEFG
//Обычный режим: abcd
}
public static T TraceFormat<T>(это T t, строка формата строки)
public static T TraceFormat<T>(это T t, строка формата строки, классификация строк)
Функция: вывод значения текущего объекта в окно вывода Visual Studio после форматирования и возврат исходного объекта. Эта функция используется только для облегчения отладки. Значения могут выводиться на любом этапе цепочки методов без какого-либо влияния на непрерывность цепочки методов.
пример:
[Тестовый метод]
публичный недействительный TestMethod10()
{
var m = Math.Max(0.31, 0.65).TraceFormat("Максимальное значение равно {0}", "Режим форматирования");
варВыход = 0,65;
Assert.AreEqual(Out, м);
//Выходное содержимое следующее:
//Режим форматирования: максимальное значение 0,65
}
public static void ForEach<T>(этот источник System.Collections.Generic.IEnumerable<T>, операция System.Action<T>)
public static void ForEach<T>(этот источник System.Collections.Generic.IEnumerable<T>, операция System.Action<T,int>)
Функция: просмотреть коллекцию и выполнить указанные операции. (В перегруженной форме параметр типа int, передаваемый в выражение, представляет текущее количество циклов)
пример:
[Тестовый метод]
публичный недействительный TestMethod11()
{
вар l = новый int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
вар с = 0;
l.ForEach(f => c += f);
варАут = 45;
Assert.AreEqual(Out, c);
l.ForEach((f, i) => c -= i);
Выход = 9;
Assert.AreEqual(Out, c);
}
public static Switch<T> Switch<T>(этот T v)
public static Case<T,R> Switch<T, R>(это T v, System.Func<R,R,R> Do)
Функция: определение текущего значения, выполнение соответствующих операций или возврат соответствующих значений в соответствии с различными условиями сопоставления. (В перегруженной форме каждое возвращаемое значение может быть наложено с помощью выражений)
Подробные инструкции см. в разделе «Слегка улучшенный метод расширения переключателя/корпуса».
пример:
[Тестовый метод]
публичный недействительный TestMethod12()
{
вар я = 15;
я.Переключатель()
.CaseRun(15, f => MessageBox.Show("равно 15"),false)
.CaseRun(f => f > 0, f => MessageBox.Show("больше 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("меньше 0"))
.DefaultRun(f => MessageBox.Show("Равно 0"));
вар о = 'c'.Switch()
.CaseReturn('а', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
Assert.AreEqual(3, о);
}
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(это To, System.Func<T,IEnumerable<T>> выражение рекурсивного выбора элемента)
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(это To, System.Func<T,IEnumerable<T>> выражение рекурсивного выбора элемента, тестовое выражение System.Predicate<T>)
Функция: рекурсивно выбирать элементы и возвращать окончательную выбранную коллекцию.
Объяснение соответствующих принципов см. в разделе «Расширенная часть 7 замечательного использования методов расширения C#: универсальный обходчик дерева».
пример:
[Тестовый метод]
публичный недействительный TestMethod13()
{
//Получаем все коллекции каталогов, содержащие подкаталоги в указанном каталоге
var d = new DirectoryInfo(@"C:UsersPublicDownloads");
var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
}
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(это System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> выражение рекурсивного выбора элемента)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(это System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> выражение рекурсивного выбора элемента, System.Predicate<T> тестовое выражение Mode )
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(это System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> выражение рекурсивного выбора элемента)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(это System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> выражение рекурсивного выбора элемента, System.Predicate < T>тестовое выражение)
Функция: пройти по текущему объекту коллекции, рекурсивно выбрать элементы один за другим и вернуть окончательную выбранную коллекцию.
Объяснение соответствующих принципов см. в разделе «Расширенная часть 7 замечательного использования методов расширения C#: универсальный обходчик дерева».
пример:
[Тестовый метод]
публичный недействительный TestMethod14()
{
//Получаем все коллекции каталогов, содержащие подкаталоги в указанном каталоге
вар l = новый список<DirectoryInfo>();
l.Add(new DirectoryInfo(@"C:UsersSkyDDownloads"));
l.Add(new DirectoryInfo(@"C:UsersPublicDownloads"));
var c = l.RecursionEachSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
}
public static bool RegexIsMatch (эта строка s, строковое выражение, опция System.Text.RegularExpressions.RegexOptions)
public static bool RegexIsMatch (эта строка s, строковое выражение)
public static System.Text.RegularExpressions.Match RegexMatch(эта строка s, строковое выражение, параметры System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.Match RegexMatch(эта строка s, строковое выражение)
общедоступный статический System.Text.RegularExpressions.MatchCollection RegexMatches (эта строка s, строковое выражение, параметры System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.MatchCollection RegexMatches(эта строка s, строковое выражение)
общедоступная статическая строка RegexReplace (эта строка s, строковое выражение, значение замены строки, опция System.Text.RegularExpressions.RegexOptions)
общедоступная статическая строка RegexReplace (эта строка s, строковое выражение, значение замены строки)
общедоступная статическая строка [] RegexSplit (эта строка s, строковое выражение, параметры System.Text.RegularExpressions.RegexOptions)
общедоступная статическая строка [] RegexSplit (эта строка s, строковое выражение)
Функция: часто используемая инкапсуляция функции регулярного выражения, метод использования такой же, как и у класса Regex.
public static T As<T>(эта строка s), где T: new(), общее расширение.SpecialString
общедоступное статическое универсальное расширение.HtmlString AsHtmlString(эта строка s)
общедоступное статическое универсальное расширение.PathString AsPathString(эта строка s)
общедоступное статическое универсальное расширение.ServerPathString AsServerPathString (эта строка s)
общедоступное статическое универсальное расширение.UriString AsUriString(эта строка s)
общедоступное статическое универсальное расширение.XHtmlString AsXHtmlString(эта строка s)
общедоступное статическое универсальное расширение.XmlString AsXmlString(эта строка s)
Функция: определяется как особый тип строки, которую можно дополнительно изменить с помощью уникальных команд форматирования. (В настоящее время последующие функции форматирования после определения относительно ограничены и будут постепенно добавляться в будущем)
пример:
[Тестовый метод]
публичный недействительный TestMethod15()
{
вар s = @"C:abc";
var Out = @"C:abc1.exe";
Assert.AreEqual(Out, s.AsPathString().Combine(@"D:1.exe".AsPathString().FileName));
}
Заключение Это наиболее часто используемые здесь расширения, надеюсь, они одинаково полезны всем :)
Загрузите исходный код метода расширения: http://www.uushare.com/user/icesee/file/2435046 .
Пример исходного кода: http://www.uushare.com/user/icesee/file/2435063.
XPS-версия этой статьи: http://www.uushare.com/user/icesee/file/2435098.