textos texto que para objetivo niƱos lugar informativo hacer elementos ejemplos ejemplo descriptivos descriptivo como animales c#

c# - que - Formato de cadena de texto descriptivo



texto descriptivo youtube (7)

A partir de Visual Studio 2015 puedes hacer esto con cadenas interpoladas (es un truco de compilación, por lo que no importa a qué versión de .net framework te dirijas).

El código se ve algo como esto

string txt = $"{person.ForeName} is not at home {person.Something}";

No es ideal si desea colocar las cadenas en archivos de recursos para su traducción, pero a menudo hace que el código sea más legible y menos propenso a errores.

¿Es posible agregar texto descriptivo a un especificador de formato de cadena?

Ejemplo:

string.Format ("{0:ForeName} is not at home", person.ForeName);

En el ejemplo ForeName se agrega como descripción.

La sintaxis anterior es obviamente incorrecta, pero solo para mostrar la idea.

La razón por la que pregunto es porque en mi caso las cadenas están en un archivo de recursos, por lo que en el archivo de recursos solo se ve actualmente

{0} is not at home

en algunos casos es difícil comprender cuál es el contexto de {0} .

EDITAR:

En c # 6 se ha introducido la interpolación con el operador $ , por lo que no se necesita el string.Format .

$"{person.ForeName} is not at home";


Generalmente ponemos comentarios en nuestro archivo de recursos, por ejemplo, {0} = Forename .

Entonces, cualquiera que pueda estar traduciendo la cadena sabe lo que representa {0} y puede traducir en consecuencia.

Además, si usa ReSharper, puede ingresar el comentario al mismo tiempo cuando agrega su cadena a los recursos.


No hay una función C # incorporada para eso. Lo mejor que puedo proponer es insertar un comentario (esto no tendrá ningún impacto en el rendimiento):

string.Format ("{0"/*ForeName*/+"} is not at home", person.ForeName);

Personalmente, no me resulta fácil leerlo, lo mejor es utilizar una herramienta de terceros, como lo sugirió David Khaykin en el comentario (ver esta respuesta )


Para cadenas, su método debería funcionar, ya que las cadenas ignorarán cualquier especificador de formato. Sin embargo, corre el riesgo de usarlo accidentalmente para los tipos que no son cadenas, en cuyo caso la cadena se traducirá como códigos de formato o se mostrará literalmente :

string.Format ("{0:ForeName} is not at home", "Johnny"); //"Johnny is not at home" string.Format ("{0:ForeName} will be home at {1:HomeTime}", "Johnny", DateTime.Today) //Johnny will be home at 0o0eTi0e -- H, h, and m are DateTime format codes.

Sin embargo, dado que los está almacenando en un archivo de recursos, en lugar de eso, usaría el campo "comentario" en el archivo de recursos; podría almacenar una copia de la cadena de formato y agregar allí sus descripciones.


Phil Haack y Peli han escrito un par de publicaciones de blog interesantes sobre alternativas a la función string.format predeterminada. Te pueden interesar.

Básicamente, te permiten usar las propiedades de los objetos dentro de la cadena de formato como esta:

string s = NamedFormat("Hello {FullName} ({EmailAdrress})!", person);

Puedes ver las publicaciones del blog aquí:

Quizás una de las soluciones cubiertas en esas publicaciones de blog se adapte a sus necesidades.


Demo de IDEOne.com

Aquí hay una implementación algo ingenua del método formatUnicorn de :

using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Reflection; public class Test { public static void Main() { string formatString = "{firstName} {lastName} is awesome."; Console.WriteLine(formatString.FormatUnicorn(new { firstName = "joe", lastName = "blow" })); } } public static class StringExtensions { public static string FormatUnicorn(this string str, object arguments) { string output = str; Type type = arguments.GetType(); foreach (PropertyInfo property in type.GetProperties()) { Regex regex = new Regex(@"/{" + property.Name + @"/}"); output = regex.Replace(output, property.GetValue(arguments, null).ToString()); } return output; } }

El mayor inconveniente aquí es el uso de la reflexión, que puede ser lento . La otra es que no permite especificadores de formato.

Un mejor enfoque podría ser crear una expresión regular más compleja que solo elimine los comentarios.


string.Format ("{0} is not at home {1} ", person.ForeName, person.Something);

Esto imprimirá el ForeName en lugar de {0} y algo en {1}. No hay manera de como dijiste.