Introducción Desde que comencé a usar métodos de extensión, no pude dejar de usarlos. Han mejorado enormemente la eficiencia de mi escritura de código y ahora me he vuelto muy dependiente de ellos. Me gustaría compartir mi método de extensión de uso común establecido aquí para comodidad de todos.
(Algunos de ellos están tomados prestados o apropiados de artículos de otros blogueros. Me gustaría agradecer especialmente a He Chongtian por sus muchas participaciones)
El código fuente se proporciona al final del artículo.
Ejemplo
cadena estática pública ExpandAndToString (este System.Collections.IEnumerable s, carácter espaciador de cadena)
Función: expanda la colección y ejecute el método ToString respectivamente, y luego conéctelos con el delimitador especificado para unirlos en una cadena.
ejemplo:
[Método de prueba]
Método de prueba público vacío1 ()
{
var i = nuevo int[] {1,5,33,14,556};
var Salida="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
bool estático público IsNullOrEmpty (esta cadena s)
Función: verificar si el objeto de cadena es un objeto vacío o una cadena vacía.
ejemplo:
[Método de prueba]
Método de prueba público vacío2()
{
cadena s = nulo;
Assert.AreEqual(true,s.IsNullOrEmpty());
s+= "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
}
cadena estática pública IsNullOrEmptyThen (esta cadena s, expresión System.Func<cadena,cadena>)
Función: verificar si el objeto de cadena es un objeto vacío o una cadena vacía. Si es así, ejecute la expresión entrante y devuelva el resultado de la expresión.
ejemplo:
[Método de prueba]
Método de prueba público vacío 3 ()
{
var = "";
var Salida = "1234";
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
}
public static void IsNullOrEmptyThen (esta cadena s, expresión System.Action<cadena>)
Función: verificar si el objeto de cadena es un objeto vacío o una cadena vacía y, de ser así, ejecutar la expresión entrante.
ejemplo:
[Método de prueba]
Método de prueba público vacío 4 ()
{
var = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("Sin contenido"));
}
Formato de cadena estática pública con (esta cadena s, parámetros de formato de objeto [])
Cadena estática pública FormatWith (esta cadena s, parámetro de formato de objeto 1)
Cadena estática pública FormatWith (esta cadena s, parámetro de formato de objeto 1, parámetro de formato de objeto 2)
Cadena estática pública FormatWith (esta cadena s, parámetro de formato de objeto 1, parámetro de formato de objeto 2, parámetro de formato de objeto 3)
Función: Formatear cadena.
ejemplo:
[Método de prueba]
Método de prueba público vacío5()
{
var i = 0,35;
var x = 200;
var Salida = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
}
bool estático público In<T>(este T t, params T[] base de juicio)
Función: determina si el objeto actual está en la matriz entrante.
ejemplo:
[Método de prueba]
Método de prueba público vacío6()
{
var i = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
bool estático público In<T, C>(esta expresión de juicio T t, System.Func<T,C,bool>, base de juicio params C[])
Función: determina si el objeto actual está en la matriz entrante. El método de juicio lo especifica la expresión entrante.
ejemplo:
[Método de prueba]
Método de prueba vacío público7 ()
{
var i = 95;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4 "));
}
bool estático público InRange<T>(este System.IComparable<T> t, valor mínimo de T, valor máximo de T)
bool estático público InRange (este System.IComparable t, valor mínimo del objeto, valor máximo del objeto)
Función: Determinar si el valor actual está dentro del rango especificado.
ejemplo:
[Método de prueba]
Método de prueba vacío público8 ()
{
var i = 95;
Afirmar.IsTrue(i.InRange(15, 100));
Afirmar.IsTrue(i.InRange(-3000, 300));
Afirmar.IsFalse(i.InRange(-1, 50));
var = "b";
Assert.IsTrue(s.InRange("a", "c"));
Assert.IsTrue(s.InRange("1", "z"));
Assert.IsFalse(s.InRange("e", "h"));
}
Seguimiento T estático público<T>(este T t)
Seguimiento T estático público <T> (este T t, clasificación de cadena)
T Trace<T> estático público (esta expresión T t, System.Func<T,object>)
T Trace<T> estático público (este T t, expresión System.Func<T,object>, clasificación de cadenas)
Función: envíe el valor del objeto actual a la ventana de salida de Visual Studio y devuelva el objeto original. Esta función solo se utiliza para facilitar la depuración. Los valores se pueden generar en cualquier paso de la cadena del método sin ningún impacto en la continuidad de la cadena del método.
ejemplo:
[Método de prueba]
Método de prueba público vacío9 ()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "modo de expresión").Remove(4).Trace("modo normal");
var Salida = "abcd";
Afirmar.AreEqual(Fuera, s);
//El contenido de salida es el siguiente:
//Patrón de expresión: ABCDEFG
//Modo normal: abcd
}
público estático T TraceFormat<T>(este T t, cadena de formato de cadena)
público estático T TraceFormat<T>(este T t, cadena de formato de cadena, clasificación de cadena)
Función: envíe el valor del objeto actual a la ventana de salida de Visual Studio después de formatear y devuelva el objeto original. Esta función solo se utiliza para facilitar la depuración. Los valores se pueden generar en cualquier paso de la cadena del método sin ningún impacto en la continuidad de la cadena del método.
ejemplo:
[Método de prueba]
Método de prueba público vacío 10 ()
{
var m = Math.Max(0.31, 0.65).TraceFormat("El valor máximo es {0}", "Modo de formato");
salidavar = 0,65;
Afirmar.AreEqual(Fuera, m);
//El contenido de salida es el siguiente:
//Modo de formato: el valor máximo es 0,65
}
vacío estático público ForEach<T>(esta fuente System.Collections.Generic.IEnumerable<T>, operación System.Action<T>)
vacío estático público ForEach<T>(esta fuente System.Collections.Generic.IEnumerable<T>, operación System.Action<T,int>)
Función: recorrer una colección y realizar operaciones específicas. (En la forma sobrecargada, el parámetro de tipo int pasado a la expresión representa el número actual de bucles)
ejemplo:
[Método de prueba]
Método de prueba público vacío 11 ()
{
var l = nuevo int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var c = 0;
l.ForEach(f => c += f);
varSalida = 45;
Afirmar.AreEqual(Fuera, c);
l.ForEach((f, i) => c -= i);
Fuera = 9;
Afirmar.AreEqual(Fuera, c);
}
Switch estático público<T> Switch<T>(este T v)
Caso estático público<T,R> Switch<T, R>(este T v, System.Func<R,R,R> Do)
Función: determinar el valor actual, realizar las operaciones correspondientes o devolver los valores correspondientes de acuerdo con diferentes condiciones coincidentes. (En la forma sobrecargada, cada valor de retorno puede superponerse mediante expresiones)
Para obtener instrucciones detalladas, consulte: "Método de extensión de caja/interruptor ligeramente mejorado"
ejemplo:
[Método de prueba]
Método de prueba público vacío 12 ()
{
var i = 15;
i.Cambiar()
.CaseRun(15, f => MessageBox.Show("igual a 15"),falso)
.CaseRun(f => f > 0, f => MessageBox.Show("mayor que 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("menos de 0"))
.DefaultRun(f => MessageBox.Show("Igual a 0"));
var o = 'c'.Cambiar()
.CaseReturn('a', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
Afirmar.AreEqual(3, o);
}
público estático System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(este T o, System.Func<T,IEnumerable<T>> expresión de selección de elemento recursivo)
público estático System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(este T o, System.Func<T,IEnumerable<T>> expresión de selección de elemento recursivo, System.Predicate<T> expresión de prueba)
Función: selecciona elementos de forma recursiva y devuelve la colección final seleccionada.
Para obtener una explicación de los principios relevantes, consulte: "Parte avanzada 7 del maravilloso uso de los métodos de extensión de C#:" Árbol "Universal Traverser"
ejemplo:
[Método de prueba]
Método de prueba público vacío 13 ()
{
//Obtiene todas las colecciones de directorios que contienen subdirectorios en el directorio especificado
var d = new DirectoryInfo(@"C:UsersPublicDownloads");
var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
}
público estático System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(este System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> expresión de selección de elemento recursivo)
público estático System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(este System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> expresión de selección de elemento recursivo, System.Predicate<T> modo de expresión de prueba )
System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T> (este System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> expresión de selección de elementos recursiva)
público estático System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(este System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> expresión de selección de elemento recursivo, System.Predicate < T> expresión de prueba)
Función: recorre el objeto de la colección actual, selecciona recursivamente elementos uno por uno y devuelve la colección final seleccionada.
Para obtener una explicación de los principios relevantes, consulte: "Parte avanzada 7 del maravilloso uso de los métodos de extensión de C#:" Árbol "Universal Traverser"
ejemplo:
[Método de prueba]
Método de prueba público vacío 14 ()
{
//Obtiene todas las colecciones de directorios que contienen subdirectorios en el directorio especificado
var l = nueva Lista<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());
}
bool estático público RegexIsMatch (esta cadena s, expresión de cadena, opción System.Text.RegularExpressions.RegexOptions)
bool estático público RegexIsMatch (esta cadena s, expresión de cadena)
público estático System.Text.RegularExpressions.Match RegexMatch (esta cadena s, expresión de cadena, opciones System.Text.RegularExpressions.RegexOptions)
público estático System.Text.RegularExpressions.Match RegexMatch (esta cadena s, expresión de cadena)
System.Text.RegularExpressions.MatchCollection RegexMatches estático público (esta cadena s, expresión de cadena, opciones System.Text.RegularExpressions.RegexOptions)
público estático System.Text.RegularExpressions.MatchCollection RegexMatches (esta cadena s, expresión de cadena)
cadena estática pública RegexReplace (esta cadena s, expresión de cadena, valor de reemplazo de cadena, opción System.Text.RegularExpressions.RegexOptions)
cadena estática pública RegexReplace (esta cadena s, expresión de cadena, valor de reemplazo de cadena)
cadena estática pública [] RegexSplit (esta cadena s, expresión de cadena, opciones System.Text.RegularExpressions.RegexOptions)
cadena estática pública [] RegexSplit (esta cadena s, expresión de cadena)
Función: encapsulación de funciones de expresión regular de uso común, el método de uso es el mismo que el de la clase Regex.
public static T As<T>(esta cadena s) donde T: new(), extensión general.SpecialString
extensión universal estática pública.HtmlString AsHtmlString (esta cadena s)
extensión universal estática pública.PathString AsPathString (esta cadena s)
extensión universal estática pública.ServerPathString AsServerPathString (esta cadena s)
extensión universal estática pública.UriString AsUriString (esta cadena s)
extensión universal estática pública.XHtmlString AsXHtmlString (esta cadena s)
extensión universal estática pública.XmlString AsXmlString (esta cadena s)
Función: Definido como un tipo especial de cadena que se puede modificar aún más mediante comandos de formato únicos. (Actualmente, las funciones de formato posteriores a la definición son relativamente limitadas y se agregarán gradualmente en el futuro)
ejemplo:
[Método de prueba]
Método de prueba público vacío 15 ()
{
var s = @"C:abc";
var Salida = @"C:abc1.exe";
Assert.AreEqual(Out, s.AsPathString().Combine(@"D:1.exe".AsPathString().FileName));
}
Conclusión Estas son las extensiones más utilizadas aquí, espero que sean igualmente útiles para todos :)
Descargue el código fuente del método de extensión: http://www.uushare.com/user/icesee/file/2435046
Código fuente de muestra: http://www.uushare.com/user/icesee/file/2435063
Versión XPS de este artículo: http://www.uushare.com/user/icesee/file/2435098