Подтвердить что ты не робот

С# String.Format args

У меня есть такой массив:

object[] args

и нужно вставить эти аргументы в строку, например:

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

вместо:

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

ПРИМЕЧАНИЕ. На самом деле работала первая строка кода! Но аргументы [1] отсутствовали! Извините и благодарю вас. Очки для каждого:)

4b9b3361

Ответ 1

Ваш первый пример должен работать нормально, если в массиве args есть как минимум два объекта.

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

Ответ 2

Он должен работать так, как вы этого хотите. Класс String имеет следующее определение метода формата:

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

Увидев, как "args" в вашем примере представляет собой массив объектов, он должен соответствовать прямо.

Ответ 3

Если вы не знаете, сколько элементов массива находится в массиве аргументов, попробуйте использовать string.Join().

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

В частности, в вашем примере:

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

Лично мне не нравятся жестко закодированные структуры объекта массива. Это слишком много для запоминания во всем приложении и затрудняет его поддержку. Я бы скорее превратил аргументы в объект "Person" с конструктором, который принимает массив, и перегружает ToString(), чтобы отобразить конкретную информацию об объектах.

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 {1} years old.", m_sName, m_sAge);
    }
}

Итак, вы можете создать объект "Person" и отобразить сообщение при вызове.

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

Это очень похоже на пример Microsoft:

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

Ответ 4

Я не уверен, что вы просите, но любой из них должен работать, учитывая, что одна из подписей для функции String.Format() -

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

Больше мусора, который я скопировал из Visual Studio:

Резюме: Заменяет элемент формата в указанной System.String текстовым эквивалентом значения соответствующего экземпляра System.Object в указанном массиве.

Параметры: format: Строка композитного формата. args: массив System.Object, содержащий ноль или более объектов для форматирования.

Возвращаемые значения: Копия формата, в котором элементы формата были заменены эквивалентом System.String соответствующих экземпляров System.Object в args.

Исключения: System.ArgumentNullException: формат или args равно null. System.FormatException: формат недопустим. -или- Число, указывающее аргумент для формата, меньше нуля или больше или равно длине массива args.

- Упс на VB, но вы получаете точку.

Ответ 5

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

Должен работать, когда args имеет объект type [].

Ответ 6

Оба примера делают одно и то же: String.Format имеет перегрузку, которая принимает объект [] вместо указания каждого аргумента отдельно.

Ответ 7

Ваш второй блок кода будет делать то, что, как я думаю, вы пытаетесь выполнить.

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

Ответ 8

Вы даже попробовали первую строку? Вы видели, что он должен работать так же, как второй?