una sujeto sintaxis sintactico sintacticamente primaria predicado para oraciones oracion explicacion como arborizar analizar analisis c# .net html razor

c# - sujeto - Sintaxis simple de plantillas de afeitar para incluir una coma para separar los nombres



sintaxis de oraciones explicacion (7)

¿Qué pasa con string.Join en lugar de foreach (incluso resuelve la coma después del último problema del elemento):

@String.Join(", ", Model.People.Select(p => p.Name).ToArray())

Tengo la siguiente plantilla de afeitar html, ¡aunque no sé cómo incluir una coma para separar los nombres dentro del marcado !? Cuando intento el siguiente código, obtengo ; expected como un error de compilador !. También necesitaré quitar la última coma también.

@foreach (People person in Model.People) { person.Name, }

Quiero: Ted, James, Jenny, Tom


Podría lograr el resultado de una forma compacta utilizando un operador ternario

@foreach (People person in Model.People) { @person.Name@((person != Model.People.Last()) ? "," : "") }


Prueba esto:

bool firstIteration = true @foreach (People person in Model.People) { if(firstIteration) { @: person.Name } else { @: "," + person.Name } firstIteration = false; }


Pruebe algo como

@foreach (People person in Model.People) { @person.Name<text>,</text> }


Puede usar <text></text> para incluir contenido literal en una plantilla Razor. Para omitir la última coma, usaría un ciclo for lugar de foreach .

@{ var peopleList = Model.People.ToList(); for( int i = 0; i < peopleList.Count; i++ ) { @peopleList[i].Name if( i < peopleList[i].Count - 1 ) { <text>,</text> } } }

Como señala @nemesv, si todo lo que estás haciendo es crear y mostrar una cadena delimitada, string.Join() es una forma más limpia de lograr esto. Si está creando un marcado más complejo, probablemente necesite usar un bucle.


Una idea para un escenario en el que necesita hacer "cosas" adicionales en el ciclo foreach que solo renderizar la pantalla.

// index.cshtml @{ var lastPerson = Model.People.LastOrDefault(); } @foreach (People person in Model.People) { var display = person != lastPerson ? $"{person.Name}, " : person.Name; <a href="@person.Href">@display</a> }

O si eres como yo y quieres tratar de mantener la comparación y la lógica de análisis fuera de la vista, puedes escribir un método de extensión simple.

// StringExtensions.cs public class StringExtensions { public static string DisplayAsCommaListItem( this string str, object currentItem, object lastItem) { return currentItem != lastItem ? $"{str}, " : str; } }

Entonces el código de vista se convierte en ..

// index.cshtml @{ var lastPerson = Model.People.LastOrDefault(); } @foreach (People person in Model.People) { <a href="@person.Href">@person.Name.DisplayAsCommaListItem(person, lastPerson)</a> }


@foreach (People person in Model.People) { person.Name<text>,&nbsp;</text> }

o mejor:

string.Join(", ", Model.People.Select(x => x.Name).ToArray())