una recortar quitar extraer ejemplos ejemplo comparar caracteres cadenas cadena c# linq string linq-to-objects take

c# - recortar - ¿Cómo `.Take()` en una cadena y obtener una cadena al final?



string[] c# ejemplos (4)

Me he encontrado con esto unas cuantas veces y uso lo siguiente:

string.Join(string.Empty,yourString.Take(5));

LINQ to Objects admite consultas en objetos de cadena, pero cuando uso código como el siguiente:

string SomeText = "this is some text in a string"; return SomeText.Take(6).ToString();

Todo lo que obtengo es:

System.Linq.Enumerable+<TakeIterator>d__3a`1[System.Char]

Esto se discute como un "accidente" en esta pregunta, pero esto es lo que realmente estoy tratando de hacer y no puedo encontrarlo a través de la búsqueda en cualquier lugar.

Sé que hay otras formas de manipular cadenas, pero también sé que puedes hacer algunos trucos realmente geniales con LINQ y me gustaría saber si hay una forma de recortar una cadena con cierta longitud con LINQ.


No hay ningún método integrado en System.Linq para hacer esto, pero podría escribir su propio método de extensión con bastante facilidad:

public static class StringExtensions { public static string ToSystemString(this IEnumerable<char> source) { return new string(source.ToArray()); } }

Desafortunadamente, debido a que object.ToString existe en todos los objetos .NET, tendría que darle al método un nombre diferente para que el compilador invoque su método de extensión, no el ToString .

Según su comentario a continuación, es bueno preguntarse si este es el enfoque correcto. Debido a que String expone una gran cantidad de funcionalidades a través de sus métodos públicos, implementaría este método como una extensión en String propio String :

/// <summary> /// Truncates a string to a maximum length. /// </summary> /// <param name="value">The string to truncate.</param> /// <param name="length">The maximum length of the returned string.</param> /// <returns>The input string, truncated to <paramref name="length"/> characters.</returns> public static string Truncate(this string value, int length) { if (value == null) throw new ArgumentNullException("value"); return value.Length <= length ? value : value.Substring(0, length); }

Lo usarías de la siguiente manera:

string SomeText = "this is some text in a string"; return SomeText.Truncate(6);

Esto tiene la ventaja de no crear arreglos / objetos temporales cuando la cadena ya es más corta que la longitud deseada.


Solo crea una cadena

string res = new string(SomeText.Take(6).ToArray());

También presta atención a los métodos nativos de cadena

string res = SomeText.Substring(0, 6);


SomeText.Take(6) devolverá un IEnumerable de char of char, y el método ToString no devolverá la cadena sospechosa que necesita para llamarlo de la siguiente manera:

string [] array = SomeText.Take(6).ToArray(); string result = new string(array);