2009-09-16 20 views
26

I tienen una serie de esta manera:C args # String.Format

object[] args 

y necesitan para insertar esos args en una cadena, por ejemplo:

str = String.Format("Her name is {0} and she's {1} years old", args); 

en lugar de:

str = String.Format("Her name is {0} and she's {1} years old", args[0], args[1]); 

NOTA: ¡En realidad, la primera línea de código funcionó! ¡Pero args [1] no se encontraba! Lo siento y gracias. Puntos para todos :)

+17

¿Tiene una pregunta? – leppie

Respuesta

69

Su primer ejemplo debería funcionar bien, siempre que haya al menos dos objetos en la matriz args.

object[] args = new object[] { "Alice", 2 }; 
str = String.Format("Her name is {0} and she's {1} years old", args); 
11

Se debe trabajar de la manera que desea. La clase String tiene el siguiente método Formato definición:.

public static string Format(string format, params object[] args); 

En vista de que los "argumentos" en su ejemplo es una matriz de objetos, debe encajar perfectamente en

1

Su segundo código de bloque haría lo que creo que estás tratando de lograr.

string.Format("Hello {0}, {1} and {2}", new object[] { "World", "Foo", "Bar" }); 
1

¿Has probado la primera línea? ¿Viste que debería funcionar igual que el segundo?

2
str = String.Format("Her name is {0} and she's {1} years old", args); 

Debería funcionar cuando args es de tipo objeto [].

3

no estoy seguro de lo que estás pidiendo, pero cualquiera de los que debe trabajar, teniendo en cuenta que una de las firmas para el String.Format() es

Public Shared Function Format(ByVal format As String, ByVal ParamArray args() As Object) As String 

más basura copié desde Visual Estudio:

Resumen: reemplaza el elemento de formato en un System.String especificado con el texto equivalente del valor de una instancia de System.Object correspondiente en una matriz especificada.

Parámetros: formato: Una cadena de formato compuesto. args: una matriz System.Object que contiene cero o más objetos para formatear.

Valores devueltos: Una copia del formato en el que los elementos de formato se han sustituido por el System.String equivalente de las instancias correspondientes de System.Object en args.

Excepciones: System.ArgumentNullException: formato o argumentos es nulo. System.FormatException: el formato no es válido. -o bien - El número que indica un argumento para formatear es menor que cero, o mayor o igual que la longitud de la matriz args.

- Oops en el VB, pero entiendes el punto.

+1

Me encanta que la definición de API que dio fue para VB. ;-) –

2

Ambos ejemplos hacen lo mismo: String.Format tiene una sobrecarga que acepta un objeto [] en lugar de especificar cada argumento por separado.

12

Si no sabe cuántos elementos de matriz hay en la matriz de argumentos, intente utilizar string.Join().

string.Format("Arguments passed in to the program are: {0}", string.Join(" ", args)); 

Específicamente en su ejemplo:

string.Format("Her name is {0} years old", string.Join(" and she's ", args)); 

Personalmente, no me gusta estructuras codificadas de forma rígida de un objeto array. Eso es demasiado para recordar durante la aplicación y hace que sea difícil de mantener. Prefiero convertir los argumentos en un objeto "Persona" con un constructor que acepte la matriz, y sobrecargar ToString() para mostrar la información específica sobre los miembros del objeto.

class Person 
{ 
    private string m_sName; 
    private string m_sAge; 

    public Person(string[] args) 
    { 
     m_sName = args[0]; 
     m_sAge = args[1]; 
    } 

    public override string ToString() 
    { 
     return string.Format("Her name is {0} and she's {1} years old.", m_sName, m_sAge); 
    } 
} 

Para que pueda construir un objeto "Persona" y mostrar el mensaje cuando se le llame.

var oNewPerson = new Person(args); 
console.WriteLine(oNewPerson.ToString()); 

Esto es muy similar a un ejemplo de Microsoft:

http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx