Строковая интерполяция с использованием строки - PullRequest
0 голосов
/ 13 ноября 2018

Ниже приведен пример интерполяции строки.Если apple равно apple, возвращается yes или no.

var result = $"{("apple" == "apple" ? "yes" : "no")}";

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

string text= "{(apple == apple ? yes: no)}";
var result = $"{text}";

Iожидается var result будет yes.Как это похоже на приведенный выше код.Тем не менее, в результате я получаю строку text it self.

Мой вопрос: как передать строку, аналогичную "{(apple == apple ? yes: no)}", и получить вывод типа yes или no?

Ответы [ 4 ]

0 голосов
/ 13 ноября 2018

Это не тот синтаксис, который вы искали, но это работает:

 public class yourFruitStand
 {
      private string yourFruitName;
      public bool YourFruitName
      {
           get
           {
               return yourFruitName;
           }
           set
           {
               yourFruitName = value;

               if(yourFruitName == "apple")
               {
                    yesOrNo = true;
               }
               else
               {
                    yesOrNo = false;
               }
           }
      }
      private bool yesOrNo;
      public bool yesOrNo
      {
           get
           {
               return yesOrNo;
           }
           set
           {
               yesOrNo = value;
           }
      }
 }
0 голосов
/ 13 ноября 2018

Если все, что вам нужно, это вернуть «да» или «нет», тогда вам не понадобится интерполяция, потому что интерполировать нечего.Вы могли бы просто сделать это:

var result = something == "apple" ? "yes" : "no";

Если вам нужна была некоторая конкатенация - другими словами, вам нужно было что-то интерполировать - вы могли бы сделать это:

var something = "apple";
var result = $"Is it an apple? {(something == "apple" ? "yes" : "no")}!";

Возвращает

Это яблоко?да!

Все условное выражение должно быть в скобках.

Для удобства чтения в любом случае имеет смысл разбить его на шаги.

var something = "apple";
var yesOrNo = something == "apple" ? "yes" : "no";
var result = $"Is it an apple? {yesOrNo}!";
0 голосов
/ 13 ноября 2018

Строковая интерполяция с $ не выполняется при времени выполнения .Он оценивается в время компиляции .Только выражение между фигурными скобками оценивается во время выполнения.

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

Func<string> textfactory = () => "apple" == "apple" ? "yes" : "no";
var result = $"{ textfactory() }";

или просто

var result = textfactory();

, поскольку интерполировать нечего, кроме самой строки.

Делегат можно передавать, например, в качестве аргумента функции.

0 голосов
/ 13 ноября 2018

Не могу. Смысл интерполяции - позволяет вводить вывод кода внутри строки. Компилятор должен знать, что вводить. Во втором случае string = text = может содержать что угодно, это больше для интерпретатора, а не для компилятора. Теперь код работает так, как должен. Имхо.

...