c#中的字符串插值有什么错?

c#中的字符串插值有什么错?,c#,string,string-interpolation,C#,String,String Interpolation,我在做什么:我试图在一个函数中构建一个字典(DictionaryBuilder),从所述字典中提取一个字符串,并在另一个函数中将变量应用到它(QuestionGenerator)。因此,每次调用QuestionBuilder,相同的字符串将返回不同的内容,而无需重复重新编写相同的词典 int a; int b; string theQuestion; string theAnswer; Dictionary<s

我在做什么:我试图在一个函数中构建一个字典(
DictionaryBuilder
),从所述字典中提取一个字符串,并在另一个函数中将变量应用到它(
QuestionGenerator
)。因此,每次调用
QuestionBuilder
,相同的字符串将返回不同的内容,而无需重复重新编写相同的词典

        int a;
        int b;
        string theQuestion;
        string theAnswer;
        Dictionary<string, string> questionDict = new Dictionary<string, string>();

        void DictionaryBuilder()
        {
            questionDict.Add("0", $"What is {a} x {b} ?");
            questionDict.Add("1", $"The sum of {a} x {b} = {a*b}");
        }

        void QuestionGenerator()
        {
            Random rnd = new Random();
            a = rnd.Next(1, 10);
            b = rnd.Next(1, 10);
            theQuestion = questionDict["0"];
            theAnswer = questionDict["1"];
            Console.WriteLine(theQuestion);
            Console.WriteLine(theAnswer);
        }
inta;
int b;
把问题串起来;
把答案串起来;
字典问题dict=新字典();
void DictionaryBuilder()
{
添加(“0”,“什么是{a}x{b}?”);
添加({a}x{b}={a*b}之和“$”);
}
空值生成器()
{
随机rnd=新随机();
a=rnd.下一个(1,10);
b=rnd.下一个(1,10);
theQuestion=questionDict[“0”];
答案=问题答案[“1”];
Console.WriteLine(问题);
Console.WriteLine(答案);
}
当前结果:“0 x 0是什么?”以及“0和0之和是0”。我无法申请新的数字


问题:我该如何进行这项工作,以便我可以将字典的创建和变量分开,以便每次调用
问题生成器
时,都会提供一个相同格式的新问题,而无需重复重建字典(我认为这是非常低效的)


QuestionGenerator
通过单击按钮调用,以生成相同格式的新问题


(请注意:实际的字典和计算将更大、更复杂,并且问题和答案将不在同一个字典中-这只是简单的示例。)

请注意,字符串是在调用
DictionaryBuilder()时插入的。字符串不是“动态”插值的

创建字典时,字符串将使用当时的初始值a和b计算一次,这两个值均为0


您需要为此创建一个小的单行方法,例如,您可以使用存储
Func
而不是字符串的字典

您应该将questionDict变成一个字典,其中函数是值,而不是字符串:

Dictionary<string, Func<string>> questionDict = new Dictionary<string, Func<string>>();

void DictionaryBuilder()
{
    questionDict.Add("0", () => $"What is {a} x {b} ?");
    questionDict.Add("1", () => $"The sum of {a} x {b} = {a*b}");
}

这允许您在调用函数时捕获事件状态(
a
b
的值)

创建包含字符串模板的词典

Dictionary<string, string> questionDict = new Dictionary<string, string>();

void DictionaryBuilder()
{
    questionDict.Add("0", "What is {a} x {b} ?");
    questionDict.Add("1", "The sum of {a} x {b} = {a*b}");
}

QuestionGenerator
通过单击按钮调用,以生成相同格式的新问题。@艾米:这是一个后续问题。最初的问题是关于其他事情的。这是最后一句的代码示例:)你不一定要通过
a
b
吗?@RobertHarvey,你可以这样设置,但只要
a
b
在范围内,你就不必这样做。在发布之前,我使用变量
a
b
在OP设置的方法的相同级别上运行代码,并且运行良好。这是一个非常巧妙的技巧。当然,只要在检索到的字符串上使用
string.Format
,而不是依赖字符串插值和函数委托,就可以避免这种情况。非常感谢!解脱是不真实的@罗伯塔维如果没有你,我也无法解决这个问题,你的帮助非常宝贵,谢谢!!谢谢你今天的帮助!!(还有善良的耐心!)
Dictionary<string, string> questionDict = new Dictionary<string, string>();

void DictionaryBuilder()
{
    questionDict.Add("0", "What is {a} x {b} ?");
    questionDict.Add("1", "The sum of {a} x {b} = {a*b}");
}
theQuestion = string.Format(questionDict["0"], a, b);