C# вставить значения из строки [] в список модели - PullRequest
0 голосов
/ 10 июля 2020

У меня есть этот список модели типа List<SequenceModel> listSequenceModel, который содержит несколько свойств, например

public class SequenceModel
{
   public int Sequence1 {get;set;}
   public int Sequence2 {get;set;}
   public int Sequence3 {get;set;}
   public int OrderNr {get;set;}
}

Я получаю эту строку с «_», которую я разделяю и создаю список строк

string[] szFilterParamsList2 = model.szFilterParams.Split('_');

Примером этой строки может быть «sequence1a_sequence1b_sequence1 c», но это также может быть «_ sequence2b _», «__sequence3» или также «sequence1 __» (здесь пробелы означают, что формат переполнения стека, игнорируйте их). Это означает, что я могу получить список с тремя элементами, не допускающими значения NULL, или любой его вариант с элементами NULL, но хотя бы один элемент должен иметь значение.

List1: [0] = "123"
       [1] = "432"
       [2] = "575"
List2: [0] = "123"
       [1] = ""
       [2] = ""
List3: [0] = ""
       [1] = "98"
       [2] = ""

и так далее.

Как я могу назначить эти значения из строки [] в List<SequenceModel> listSequenceModel? Для пустых элементов я назначу жестко запрограммированное -1, поскольку значения всегда должны быть положительными (если не нулевыми).

EDIT: SequenceModel используется в другой модели, например

public class BarcodeModel
{
   public int Product {get;set;}
   public decimal Price {get;set;}
   public List<SequenceModel> BarcodeSequence {get;set;}
}

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Предполагая, что в массиве всегда будет 3 элемента, я бы сделал что-то вроде этого:

// 0. Make the string "-1" if it has no value
private string NormalizeSequenceValue(string s){
    return string.IsNullOrEmpty(s)? "-1" : s;
}

// 1. Map the array to a SequenceModel
private SequenceModel ToSequenceModel(string [] array, int index){
    if(array.Length != 3)
        throw new ArgumentException("Array should always contain 3 elements")

    return new SequenceModel{
        Sequence1 = NormalizeSequenceValue(array[0]),
        Sequence2 = NormalizeSequenceValue(array[1]),
        Sequence3 = NormalizeSequenceValue(array[2]),
        OrderNr = index
    }
}

//2. Map a list of arrays to a list of SequenceModel
private List<SequenceModel> ToSequenceModels(List<string[]> rawSequences){
    return rawSequences.Select((value, index) => ToSequenceModel(value, index)).ToList();
}
1 голос
/ 10 июля 2020

Может ли это помочь вам при использовании Linq?

class Program
{
    static void Main(string[] args)
    {
        SplitStrings();
    }

    private static string sequence1 = "123_456_789";
    private static string sequence2 = "123__";
    private static string sequence3 = "__789";

    static void SplitStrings()
    {
        string[] szFilterParamsList1 = sequence1.Split('_').Select(s => string.IsNullOrEmpty(s) ? "-1" : s).ToArray();
        string[] szFilterParamsList2 = sequence2.Split('_').Select(s => string.IsNullOrEmpty(s) ? "-1" : s).ToArray();
        string[] szFilterParamsList3 = sequence3.Split('_').Select(s => string.IsNullOrEmpty(s) ? "-1" : s).ToArray();

        PrintArray(szFilterParamsList1);
        PrintArray(szFilterParamsList2);
        PrintArray(szFilterParamsList3);
    }

    static void PrintArray(string[] strArray)
    {
        foreach (string item in strArray)
        {
            Console.WriteLine(item);
        }
    }
}

Вывод:

123
456
789

123
-1
-1

-1
-1
789
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...