使用字符串进行字符串插值

时间:2018-11-13 17:08:59

标签: c# string-interpolation

以下是一个字符串插值示例。如果apple等于apple,则返回yes,否则返回no

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

我需要做的是分配一个字符串

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

我希望var result将是yes。由于其类似于上面的代码。但是,我得到的结果是它自己的字符串text

我的问题:如何传递类似于"{(apple == apple ? yes: no)}"的字符串并获得类似yesno的输出?

4 个答案:

答案 0 :(得分:2)

如果只想返回“ yes”或“ no”,则不需要插值,因为没有要插值的内容。您可以这样做:

0  1  2  3  4 5 6 

13 12 11 10 9 8 7

如果您需要一些连接-换句话说,您必须插值-您可以执行以下操作:

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

返回

  

是苹果吗?是的!

整个条件表达式都必须放在括号中。

出于可读性考虑,将它分成几步可能很有意义。

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

答案 1 :(得分:0)

不能。插值意义-允许将代码输出注入字符串中。编译器应该知道要注入什么。在第二种情况下,字符串= text =可以包含任何内容,更多的是用于解释程序,而不是编译器。现在,代码应以应有的方式工作。恕我直言。

答案 2 :(得分:0)

使用$进行字符串内插不会在运行时发生。在编译时评估。在运行时仅评估大括号之间的表达式。

如果要在运行时进行以后评估,则需要使用 delegate

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

或者只是

var result = textfactory();

因为除了字符串本身外没有其他可插值的东西。

代表可以被传递,例如作为函数参数。

答案 3 :(得分:0)

这与您要查找的语法不同,但这可行:

 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;
           }
      }
 }