Поддержка строки в нескольких строках в c # / visual studio [duplicate]

Вы можете сделать это с помощью такой рефлексии:

        var myEmployees = new Employees();
        var properties = myEmployees.GetType().GetProperties();

        foreach (var field in properties)
        {
            field.SetValue(myEmployees, "NewValue");
        }

        // Print all field's values
        foreach (var item in properties)
        {
            Console.WriteLine(item.GetValue(myEmployees));
        }

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

    struct FieldProperties
    {
        public string Name { get; set; }
        public string Value { get; set; }
        public string Type { get; set; }
        ...
    }


    List<FieldProperties> lst = new List<FieldProperties>();
28
задан Matthew 2 January 2010 в 03:51
поделиться

7 ответов

Я бы использовал вариацию вашего метода:

string longString =
    "Lorem ipsum dolor sit amet, consectetur adipisicing " + 
    "elit, sed do eiusmod tempor incididunt ut labore et dolore magna " + 
    "aliqua. Ut enim ad minim veniam.";

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

49
ответ дан bobbymcr 19 August 2018 в 02:22
поделиться
  • 1
    Мне нравится этот подход лучше всего. – John Feminella 2 January 2010 в 03:40
  • 2
    Также приятно, что компилятор C # объединяет такие строковые литералы во время компиляции, поэтому с этим не связаны затраты времени исполнения. – LBushkin 2 January 2010 в 03:44
  • 3
    Нет, черт возьми! – Hamish Grubijan 2 January 2010 в 04:19
  • 4
    Путь, чувак. -------------- – Eric Lippert 2 January 2010 в 21:53
  • 5
    Вы когда-нибудь пробовали это для разделения даже нескольких абзацев источника? Это утомительная работа по сравнению с строкой @ для преобразования. – Tj Kellie 28 January 2014 в 21:18

После ответа Tj Kellie в C # 6.0 вы можете легко иметь одну команду для выполнения конкатенации и встраивания различной информации через интерполяцию строк, а также не иметь строк новой строки, несмотря на определение строки на нескольких строках.

Сложный пример, включающий все это, может выглядеть следующим образом:

public int? BestTime { get; set; }
public int? WorstTime { get; set; }
public int? AvgTime { get; set; }
public int TimeoutReachedCount { get; set; }
public int AllRunCount { get; set; }

public string Str => $@"
   Ran {AllRunCount} times; 
   Reached timeout {TimeoutReachedCount} times; 
   Best time = {(BestTime.HasValue ? BestTime.ToString() : "N/A")}; 
   Worst time = {(WorstTime.HasValue ? WorstTime.ToString() : "N/A")}; 
   Average time = {(AvgTime.HasValue ? AvgTime.ToString() :"N/A")};"
       .Replace(Environment.NewLine, "");

Конечно, необходимо добавить дополнительную осторожность, чтобы добавить пробелы в конце строк, чтобы избежать слияния слов ,

0
ответ дан Alexei 19 August 2018 в 02:22
поделиться

Вы можете использовать несколько констант, а затем объединить их в одну большую строку:

const string part1 = "part 1";
const string part2 = "part 2";
const string part3 = "part 3";
string bigString = part1 + part2 + part3;

Компилятор будет «сворачивать» эти константы в одну большую строку в любом случае, поэтому вообще нет времени на выполнение этот метод по сравнению с исходным образцом кода.

Для этого подхода есть ряд преимуществ:

  1. Подстроки могут быть легко повторно использованы в других частях приложения.
  2. Подстроки могут быть определены в нескольких файлах или типах, если это необходимо.
-2
ответ дан Eilon 19 August 2018 в 02:22
поделиться
  • 1
    Я отредактировал мой вопрос, чтобы уточнить, что я имел в виду под «лучшим». – Matthew 2 January 2010 в 03:40

Если вы столкнулись с вопросом о том, как выполнять многострочные строки, возможно, вам лучше использовать файл ресурсов.

0
ответ дан Johannes Rudolph 19 August 2018 в 02:22
поделиться
  • 1
    Пожалуйста, покажите пример использования таких строк в файле ресурсов. – John Saunders 2 January 2010 в 04:47

Для SQL-запросов или других длинных строк, которые имеют свой собственный синтаксис, я иногда делаю что-то вроде этого:

        private const string QUERY = @"
SELECT *
FROM Table1 AS T1
INNER JOIN Table2 AS T2 ON T1.ID = T2.T1ID
WHERE T1.VALUE = @P1
GROUP BY T2.OTHERVALUE
";

Это оставляет форматирование строки неповрежденной.

6
ответ дан John Saunders 19 August 2018 в 02:22
поделиться

Ваша первоначальная идея, вероятно, самый простой способ иметь встроенную литеральную строку в вашем коде. Компилятор C # объединяет литералы, объединенные с + , поэтому он по существу эквивалентен одной очень длинной строке.

Другим вариантом, конечно же, является экстернализация строки в конфигурации файл или файл настроек. Это позволит сделать его более легко читаемым и легче изменить или локализовать. Я лично избегаю размещать длинные строки текста непосредственно в коде приложения, если они не очень статичны и не нуждаются в локализации - текст сообщения о внутреннем исключении и т. Д.

10
ответ дан LBushkin 19 August 2018 в 02:22
поделиться

Если вы хотите, чтобы код был минимальным, и вы можете легко его прочитать, я все равно поеду с строкой @ literal. Плюс его быстрее, если вы источник длинный и ...

string verbatimLit = @" 
   __   __  
  /  `-'  \ 
 /_| N   |_\  Sometimes
   |  I  |    format in code
   |   N |    matters
   |_____|  
";

Затем удалите строки новой строки из строки в 1 строке,

verbatimLit.Replace(Environment.NewLine, " ");
28
ответ дан Tj Kellie 19 August 2018 в 02:22
поделиться
  • 1
    Хороший подход. Хотя вы бы не хотели заменять каждую новую строку пространством? В противном случае contents<newline>here вместо contents here станет contentshere. (Или можно было бы добавить каждую строку после первого пробела.) – DavidRR 23 January 2014 в 17:56
Другие вопросы по тегам:

Похожие вопросы: