Introdução Desde que comecei a usar métodos de extensão, não conseguia parar de usá-los. Eles melhoraram muito a eficiência da minha escrita de código e agora me tornei altamente dependente deles. Gostaria de compartilhar meu método de extensão comumente usado definido aqui para a conveniência de todos.
(Alguns deles foram emprestados ou apropriados de artigos de outros blogueiros. Gostaria de agradecer especialmente a He Chongtian por seus muitos compartilhamentos)
O código-fonte é fornecido no final do artigo.
Exemplo
string estática pública ExpandAndToString (este System.Collections.IEnumerable s, caractere espaçador de string)
Função: Expanda a coleção e execute o método ToString respectivamente e, em seguida, conecte-os com o delimitador especificado para uni-los em uma string.
exemplo:
[MétodoTeste]
público vazio TestMethod1()
{
var i = new int[] {1,5,33,14,556};
var Out="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
}
public static bool IsNullOrEmpty(esta string s)
Função: Verifique se o objeto string é um objeto vazio ou uma string vazia.
exemplo:
[MétodoTeste]
público vazio TestMethod2()
{
string s = nulo;
Assert.AreEqual(true,s.IsNullOrEmpty());
s+= "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
}
string estática pública IsNullOrEmptyThen (esta string s, System.Func<string,string> expressão)
Função: Verifique se o objeto string é um objeto vazio ou uma string vazia. Em caso afirmativo, execute a expressão recebida e retorne o resultado da expressão.
exemplo:
[MétodoTeste]
público vazio TestMethod3()
{
vars = "";
var Fora = "1234";
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
}
public static void IsNullOrEmptyThen (esta string s, expressão System.Action<string>)
Função: Verifique se o objeto string é um objeto vazio ou uma string vazia e, em caso afirmativo, execute a expressão recebida.
exemplo:
[MétodoTeste]
público vazio TestMethod4()
{
vars = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("Sem conteúdo"));
}
string estática pública FormatWith(esta string s, params object[] parâmetros de formato)
string estática pública FormatWith (esta string s, parâmetro de formato de objeto 1)
string estática pública FormatWith (esta string s, parâmetro de formato de objeto 1, parâmetro de formato de objeto 2)
string estática pública FormatWith (esta string s, parâmetro de formato de objeto 1, parâmetro de formato de objeto 2, parâmetro de formato de objeto 3)
Função: Formatar string.
exemplo:
[MétodoTeste]
público vazio TestMethod5()
{
var i = 0,35;
variável x = 200;
var Fora = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
}
public static bool In<T>(esta T t, params T[] base de julgamento)
Função: Determine se o objeto atual está na matriz de entrada.
exemplo:
[MétodoTeste]
público vazio TestMethod6()
{
var i = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
}
public static bool In<T, C>(esta expressão de julgamento T t, System.Func<T,C,bool>, parâmetros C[] base de julgamento)
Função: Determine se o objeto atual está na matriz de entrada. O método de julgamento é especificado pela expressão de entrada.
exemplo:
[MétodoTeste]
público vazio TestMethod7()
{
var i = 95;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4 "));
}
public static bool InRange<T>(este System.IComparable<T> t, valor mínimo T, valor máximo T)
public static bool InRange (este System.IComparable t, valor mínimo do objeto, valor máximo do objeto)
Função: Determine se o valor atual está dentro do intervalo especificado.
exemplo:
[MétodoTeste]
público vazio TestMethod8()
{
var i = 95;
Assert.IsTrue(i.InRange(15, 100));
Assert.IsTrue(i.InRange(-3000, 300));
Assert.IsFalse(i.InRange(-1, 50));
vars = "b";
Assert.IsTrue(s.InRange("a", "c"));
Assert.IsTrue(s.InRange("1", "z"));
Assert.IsFalse(s.InRange("e", "h"));
}
público estático T Trace<T>(este T t)
public static T Trace<T>(este T t, classificação de string)
public static T Trace<T>(esta expressão T t, System.Func<T,object>)
public static T Trace<T>(esta expressão T t, System.Func<T,object>, classificação de string)
Função: envia o valor do objeto atual para a janela de saída do Visual Studio e retorna o objeto original. Esta função é usada apenas para facilitar a depuração. Os valores podem ser gerados em qualquer etapa da cadeia de métodos sem qualquer impacto na continuidade da cadeia de métodos.
exemplo:
[MétodoTeste]
público vazio TestMethod9()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "modo de expressão").Remove(4).Trace("modo normal");
var Fora = "abcd";
Assert.AreEqual(Out,s);
//O conteúdo de saída é o seguinte:
//Padrão de expressão: ABCDEFG
//Modo normal: abcd
}
public static T TraceFormat<T>(este T t, string de formato de string)
public static T TraceFormat<T>(este T t, string de formato de string, classificação de string)
Função: envia o valor do objeto atual para a janela de saída do Visual Studio após a formatação e retorna o objeto original. Esta função é usada apenas para facilitar a depuração. Os valores podem ser gerados em qualquer etapa da cadeia de métodos sem qualquer impacto na continuidade da cadeia de métodos.
exemplo:
[MétodoTeste]
público vazio TestMethod10()
{
var m = Math.Max(0,31, 0,65).TraceFormat("O valor máximo é {0}", "Modo de formatação");
varOut = 0,65;
Assert.AreEqual(Fora, m);
//O conteúdo de saída é o seguinte:
//Modo de formato: o valor máximo é 0,65
}
public static void ForEach<T>(esta fonte System.Collections.Generic.IEnumerable<T>, operação System.Action<T>)
public static void ForEach<T>(esta fonte System.Collections.Generic.IEnumerable<T>, operação System.Action<T,int>)
Função: Percorra uma coleção e execute operações especificadas. (Na forma sobrecarregada, o parâmetro do tipo int passado para a expressão representa o número atual de loops)
exemplo:
[MétodoTeste]
público vazio TestMethod11()
{
var l = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
varc = 0;
l.ForEach(f => c += f);
varOut = 45;
Assert.AreEqual(Fora, c);
l.ForEach((f, i) => c -= i);
Fora = 9;
Assert.AreEqual(Fora, c);
}
public static Switch<T> Switch<T>(este T v)
public static Case<T,R> Switch<T, R>(this T v, System.Func<R,R,R> Do)
Função: Determine o valor atual, execute as operações correspondentes ou retorne os valores correspondentes de acordo com diferentes condições de correspondência. (Na forma sobrecarregada, cada valor de retorno pode ser sobreposto por meio de expressões)
Para obter instruções detalhadas, consulte: "Método de extensão de switch/caixa ligeiramente melhorado"
exemplo:
[MétodoTeste]
público vazio TestMethod12()
{
var i = 15;
i.Switch()
.CaseRun(15, f => MessageBox.Show("igual a 15"),falso)
.CaseRun(f => f > 0, f => MessageBox.Show("maior que 0"))
.CaseRun(f => f < 0, f => MessageBox.Show("menos que 0"))
.DefaultRun(f => MessageBox.Show("Igual a 0"));
var o = 'c'.Switch()
.CaseReturn('a', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
Assert.AreEqual(3, o);
}
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(this To, System.Func<T,IEnumerable<T>> expressão de seleção de item recursivo)
public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(this To, System.Func<T,IEnumerable<T>> expressão de seleção de item recursivo, expressão de teste System.Predicate<T>)
Função: Seleciona itens recursivamente e retorna a coleção final selecionada.
Para obter uma explicação dos princípios relevantes, consulte: "Parte Avançada 7 do Maravilhoso Uso de Métodos de Extensão C#: "Tree" Universal Traverser"
exemplo:
[MétodoTeste]
público vazio TestMethod13()
{
//Obtém todas as coleções de diretórios contendo subdiretórios no diretório especificado
var d = new DirectoryInfo(@"C:UsuáriosPúblicoDownloads");
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>(esta expressão de seleção de item recursiva System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>>)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(este System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> expressão de seleção de item recursiva, System.Predicate<T> modo de expressão de teste )
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(esta expressão de seleção de item recursiva System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>>)
public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(esta System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> expressão de seleção de item recursiva, System.Predicate < T> expressão de teste)
Função: Percorre o objeto da coleção atual, seleciona recursivamente os itens um por um e retorna a coleção final selecionada.
Para obter uma explicação dos princípios relevantes, consulte: "Parte Avançada 7 do Maravilhoso Uso de Métodos de Extensão C#: "Tree" Universal Traverser"
exemplo:
[MétodoTeste]
público vazio TestMethod14()
{
//Obtém todas as coleções de diretórios contendo subdiretórios no diretório especificado
var l = new Lista<InfoDiretório>();
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 (esta string s, expressão de string, opção System.Text.RegularExpressions.RegexOptions)
public static bool RegexIsMatch (esta string s, expressão de string)
public static System.Text.RegularExpressions.Match RegexMatch (esta string s, expressão de string, opções System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.Match RegexMatch (esta string s, expressão de string)
public static System.Text.RegularExpressions.MatchCollection RegexMatches (esta string s, expressão de string, opções System.Text.RegularExpressions.RegexOptions)
public static System.Text.RegularExpressions.MatchCollection RegexMatches (esta string s, expressão de string)
string estática pública RegexReplace (esta string s, expressão de string, valor de substituição de string, opção System.Text.RegularExpressions.RegexOptions)
string estática pública RegexReplace (esta string s, expressão de string, valor de substituição de string)
string estática pública [] RegexSplit (esta string s, expressão de string, opções System.Text.RegularExpressions.RegexOptions)
string estática pública [] RegexSplit (esta string s, expressão de string)
Função: encapsulamento de função de expressão regular comumente usado, o método de uso é o mesmo da classe Regex.
public static T As<T>(esta string s) onde T: new(), extensão geral.SpecialString
extensão universal estática pública.HtmlString AsHtmlString (esta string s)
extensão universal estática pública.PathString AsPathString (esta string s)
extensão universal estática pública.ServerPathString AsServerPathString (esta string s)
extensão universal estática pública.UriString AsUriString (esta string s)
extensão universal estática pública.XHtmlString AsXHtmlString (esta string s)
extensão universal estática pública.XmlString AsXmlString (esta string s)
Função: Definido como um tipo especial de string que pode ser modificado posteriormente usando comandos de formatação exclusivos. (Atualmente, as funções de formatação subsequentes após a definição são relativamente limitadas e serão adicionadas gradualmente no futuro)
exemplo:
[MétodoTeste]
público vazio TestMethod15()
{
var s = @"C:abc";
var Out = @"C:abc1.exe";
Assert.AreEqual(Out, s.AsPathString().Combine(@"D:1.exe".AsPathString().FileName));
}
Conclusão Estas são as extensões usadas com mais frequência aqui, espero que sejam igualmente úteis para todos :)
Baixe o código-fonte do método de extensão: http://www.uushare.com/user/icesee/file/2435046
Exemplo de código-fonte: http://www.uushare.com/user/icesee/file/2435063
Versão XPS deste artigo: http://www.uushare.com/user/icesee/file/2435098