как получить строку между символом с помощью встроенного метода? - PullRequest
0 голосов
/ 09 мая 2020

Я знаю, что это повторяющийся вопрос, но мне нужна помощь с небольшим трюком, поскольку он не предоставлялся раньше.

У меня есть привязка данных с встроенным условием if, и мне нужно применить небольшой код Substring в так же "встроенный".

мой фрагмент привязки данных

<textarea id="NoteForLogos" cols="20" rows="2">
    <%# (Request.QueryString["lang"] == null || Request.QueryString["lang"].ToString() == "e"? 
        Eval("EditableHtml"): Request.QueryString["lang"].ToString() == "a"? 
        Eval("EditableHtml_A") : Eval("EditableHtml_T")).ToString() %>
</textarea>

предположим, что у меня есть такая строка.

var input = "bla bla bla bla [I need to display this] bla bla bla bla bla";

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

вот так ...

<%# (Request.QueryString["lang"] == null || Request.QueryString["lang"].ToString() == "e"? 
        Eval("EditableHtml"): Request.QueryString["lang"].ToString() == "a"? 
        Eval("EditableHtml_A") : Eval("EditableHtml_T"))
.ToString().Substring( ?.IndexOf("["), ?.IndexOf("]"))  %> //<==============

Примечание: я думаю, это может быть сделано с использованием (Лямбда-выражение)

1 Ответ

0 голосов
/ 09 мая 2020

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

Использование Split() Метод:

1) input.Split('[')?.LastOrDefault()?.Split(']')?.FirstOrDefault()
2) input.Split('[', ']')[1]

Использование Substring() Метод:

1) input.Substring(input.IndexOf('[') + 1, input.IndexOf(']') - input.IndexOf('[') - 1)

Использование Regex Выражение:

1) Regex.Match(input, @"\[([^)]*)\]")?.Groups[1]?.Value

Использование Linq Expression:

1) new string(input.Skip(input.IndexOf('[') + 1).Take(input.IndexOf(']') - input.IndexOf('[') - 1).ToArray())

Или, другим способом, вы можете создать stati c метон, если вы используете страницы aspx, а затем вызвать его в выражении. Примерно так:

public static string ExtractValue(string input)
{
    var extractedValue = "";

    var splitted = input.Split('[');
    if(splitted != null && splitted.Length > 1)
    {
        var subSplitted = splitted[1].Split(']');
        if(subSplitted != null && subSplitted.Length > 0)
        {
            extractedValue = subSplitted[0];
        }
    } // This is just to elaborate that you can go multiline in cs page while calling a static method from your aspx page during data Eval.

    return extractedValue;
}

И я предполагаю, что вы назовете это так:

<%# 
    ExtractValue(
        (Request.QueryString["lang"] == null ||
            Request.QueryString["lang"].ToString() == "e"? 
            Eval("EditableHtml"): Request.QueryString["lang"].ToString() == "a"? 
            Eval("EditableHtml_A") : Eval("EditableHtml_T"))
        .ToString()
    )
%>

PS: Конечно, вам настоятельно необходимо очистить свой лог c с параметрами строки запроса всегда настоятельно рекомендуется использовать многострочность, потому что это значительно увеличивает читаемость кода.

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