<List> satrida #

';' bilan ajratilgan fikrdan o'tgan bir qatorda bir nechta identifikatori bo'lgan ilova ustida ishlayman.
Shunday qilib, bu "P171; P172" ga o'xshab ko'rinadi.

  if (ModelState.IsValid)
    {
        hiddenIDnumber= hiddenIDnumber.Trim();
        List listStrLineElements = hiddenIDnumber.Split(';').ToList();

        foreach (string str in listStrLineElements)

Muammo shundaki, mening ikkita raqamga ega bo'lsam ham, mening yashirin hisob raqamimni ajratganimda, 3 raqamni oladi va "" qaytariladi (bu bo'sh joy ekanligiga ishonaman). Men "P171", "P172" va "" bo'lsin. Bu mening FK cheklovlarim sababli dasturimning bajarilishiga sabab bo'ladi.

"Bularni engib o'tish va" qandaydir yo'l bilan "bo'sh joyni kesib olish" usuli bormi?

1
@DavidG To'xtab turgan nuqtani tekshirib ko'rganimda aytganidek ; ro'yxatda mavjud bo'lib, faqat ""
qo'shib qo'ydi muallif Sleep Paralysis, manba
@DavidG Ha, menda 2 kod mavjud.
qo'shib qo'ydi muallif Sleep Paralysis, manba
StringSplitOptions.RemoveEmptyEntriesdan foydalanishingiz mumkin - bu nima uchun sodir bo'lishini yaxshiroq tushunish. Deyvid aytganidek, agar sizda 2 ta "" bo'lsa, shunday bo'lishi mumkin: "P171; P172;"
qo'shib qo'ydi muallif Evk, manba
Qaytab berilgan 3 ta yozuvni olishning yagona usuli, agar sizda 2 ; bo'lsa. Bu shundaymi?
qo'shib qo'ydi muallif DavidG, manba
Biz boramiz! Endi javoblarni tekshiring, ular sizning muammoni hal qiladilar (maslahat: faqatgina hozirda 1dan to'g'ri kod bor!)
qo'shib qo'ydi muallif DavidG, manba
hiddenIDnumber tarkibi haqida gapirayapman
qo'shib qo'ydi muallif DavidG, manba
@SleepParalysis "" bo'sh joy emas, bo'sh satr. Sizning fikringizga asoslanib, maxfiy kodi bu kodga o'xshaydi: "P171; P127;" Bu sizning uchta satr beradi, kodni ishlatishingiz yoki oddiygina trim keyinchalik bo'sh joyni topa olmaydi, xuddi mening javobimda bo'lgani kabi.
qo'shib qo'ydi muallif Andrew, manba

6 javoblar

string.Split kodi> , bo'sh yozuvlarni e'tiborsiz qoldirishga imkon beradi. Misol uchun:

List listStrLineElements = hiddenIDnumber
    .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
    .ToList();
7
qo'shib qo'ydi
Nihoyat, ortiqcha yuklarni to'g'rilash :)
qo'shib qo'ydi muallif Sergey Berezovskiy, manba
@SergeyBerezovskiy Men juda ko'p odamlar noto'g'ri tushundim.
qo'shib qo'ydi muallif DavidG, manba

bo'sh yozuvlarni e'tiborsiz qoldiradigan variantni ishlatishingiz mumkin

bu erda qo'shimcha ma'lumotni ko'rishingiz mumkin:

https://msdn.microsoft.com/tr -us/library/ms131448 (v = vs.110) .aspx

Ushbu kodni sinab ko'rmadingiz, lekin sizni juda yaqin qilishingiz kerak, men bog'langan MSDN sahifasida misollar mavjud

List listStrLineElements = hiddenIDnumber.Split(';', StringSplitOptions.RemoveEmptyEntries).ToList();
2
qo'shib qo'ydi
Ushbu kod kompilyatsiya qilinmaydi ...
qo'shib qo'ydi muallif DavidG, manba

Buning bir usuli String Split Options ni ishlatish mumkinligini aytaman. String.Split bilan ikki argumentni oladi, ya'ni, bu kabi bo'lishi mumkin bo'lgan ortiqcha yuk

myString.Split(new [] {';'}, StringSplitOptions.RemoveEmptyEntries);

Bu sizning katalogingizda faqat bo'sh satr bo'lishi mumkin bo'lgan har qanday yozuvlarga yo'l qo'ymasligi kerak.

2
qo'shib qo'ydi
Bu qator emas. Bu muayyan vaziyatlarda bir qator boshlovchi bo'lishi mumkin. Kod kompilyatsiya qilinmaydi
qo'shib qo'ydi muallif Sergey Berezovskiy, manba
Va siz havolani qanday ko'rasiz? :)
qo'shib qo'ydi muallif Sergey Berezovskiy, manba
Split usulining ortiqcha yuki yo'q
qo'shib qo'ydi muallif Sergey Berezovskiy, manba
@Richard sizning kodingiz shu qadar noqulay vaziyatlarda ham yuborishdan oldin har doim tekshirib turishini yaxshiroq tekshirish uchun yaxshiroqdir.
qo'shib qo'ydi muallif Evk, manba
Yaqinroq! Lekin endi u tuzilmaydi :)
qo'shib qo'ydi muallif DavidG, manba
U bilan yopishish va kodingizni tuzatish uchun yaxshi bajarilgan. Ko'p odamlar tuzatishga g'azablanishadi.
qo'shib qo'ydi muallif DavidG, manba
Qaysi tilni tekshirasiz? Mening manba bu erda joylashgan C# uchun MSDN: msdn .microsoft.com/uz-us/library/ms131448 (v = vs.110) .aspx
qo'shib qo'ydi muallif Richard, manba
Yaxshi fikr. Men qatorni ishlatish uchun xabarni tahrirladim.
qo'shib qo'ydi muallif Richard, manba
Endi ishlashim kerak, men uni kompilyatsiya qiladigan narsalarni va barcha yaxshi narsalarni ishonch hosil qildim! Barchasini tekshirib ko'rganingiz uchun tashakkur.
qo'shib qo'ydi muallif Richard, manba
Haha men boshqa odamlarni ko'rishi uchun u erda yomon kodni tark etmayman! :)
qo'shib qo'ydi muallif Richard, manba
var listStrLineElements = hiddenIDnumber.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries);

Natijalar ro'yxatidan avtomatik ravishda bo'sh yozuvlarni olib tashlash uchun StringSplitOptions.RemoveEmptyEntries parametridan foydalaning.

0
qo'shib qo'ydi
Split usulining ortiqcha yuki yo'q
qo'shib qo'ydi muallif Sergey Berezovskiy, manba

You will end up with the number of ;s plus one when you split. Since your comment mentions you have 2 ;s, you will get 3 in your list: before the first semicolon, between the first and the second, and after the second. You are not getting an empty space, you are getting a string.Empty because you have nothing after the last ;

if (ModelState.IsValid)
{
    hiddenIDnumber= hiddenIDnumber.Trim(";");
    List listStrLineElements = hiddenIDnumber.Split(';').ToList();

    foreach (string str in listStrLineElements)

Shu tarzda siz qutulasiz; bo'linib ketishingizdan oldin, oxirida bo'sh satrni qaytarib olmaysiz.

0
qo'shib qo'ydi

Siz quyidagilarni sinashingiz mumkin:

IList listStrLineElements = hiddenIDnumber.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

I prefer this over new [] { ';' } for readability, and return it to an interface (IList).

0
qo'shib qo'ydi