Как использовать string.format с массивом имен аргументов в качестве аргумента? - PullRequest
0 голосов
/ 19 июня 2019

Я хочу создать строку из переменных на основе формата другой строки. Он передает только имена строк, а не ссылки. Реф не работает. Что я могу сделать?

var format = "city, post_code, street, building_number,name"
var city = model["City"];
var post_code = model["Post_Code"];
var street = model["Street"];
var building_number = model["Building_Number"];
var name = model["Name"];
var arguments = format.Split(",");
var s = String.Format("{0} {1} {2} {3} {4}", new object[] {  arguments[0],  arguments[1], arguments[2], arguments[3], arguments[4] });

Ответы [ 3 ]

3 голосов
/ 19 июня 2019

Вы пытаетесь использовать строки в качестве имен переменных.C # - это не PHP.

Что вам на самом деле нужно, так это интерполяция строки:

var s = $"{city}, {post_code}, {street}, {building_number}, {name}";

Теперь, если вы хотите, чтобы эта строка формата была переменной, см .:

0 голосов
/ 19 июня 2019

Не уверен насчет ожидаемого результата / функциональности здесь.

Является ли формат статической информацией или она может варьироваться? Я истолковал вопрос как позднее. (Вполне базовое) решение может быть:

    public void foo(DataRow model, String format = "city,post_code,street,building_number,name")
    {
        var arguments = format.Split(',');

        var val1 = model[arguments[0]];
        var val2 = model[arguments[1]];
        var val3 = model[arguments[2]];
        var val4 = model[arguments[3]];
        var val5 = model[arguments[4]];

        var s = $"{val1} {val2} {val3} {val4} {val5}";
    }
0 голосов
/ 19 июня 2019

Вы не используете String.Format правильно.Измените свой код следующим образом

var s = String.Format("{0} {1} {2} {3} {4}", arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
...