gpt4 book ai didi

c# - 以字符串作为索引和函数指针或委托(delegate)作为值的 SortedList?和通过字符串调用函数?

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:49 25 4
gpt4 key购买 nike

我不熟悉委托(delegate)和 lambda,但此时此刻,我必须做这两件事:

  • 其中之一是:

我需要将函数传递给 SortedList。我不知道怎么做。

为什么我需要它,是:

private string Func1(string s) { return s + "1"; }
private string Func2(string s) { return s + "2"; }
private string Func3(string s) { return s + "3"; }

private void WhatEver()
{
SortedList<string, ???> list = new SortedList<string, ???>;
list.Add("Func1", Func1);
list.Add("Func2", Func2);
list.Add("Func3", Func3);

// And after that I have to pass values and get results from functions
// Like

Console.WriteLine(list["Func1"]("Test"));
Console.WriteLine(list["Func2"]("Test"));
Console.WriteLine(list["Func3"]("Test"));

// Output should be:
//
// Test1
// Test2
// Test3

}
  • 第二个:

是否可以用字符串调用函数?

例如:

假设我有三个文本框和一个函数:

tbFunction
tbArgument
tbResult

private string Test(string number)
{
int x = int.Parse(number);
return (x * x).ToString();
}

假设我在 tbFunction.Text 中有“Test”,在 tbArgument.Text 中有“2”,我怎样才能将结果带到 tbResult.Text

最佳答案

花了一段时间才弄清楚你想要什么。所以,如果我没听错的话,你想要:

  • 给定字符串变量中方法的名称,调用比方法。

简单的答案是没有内在的方法可以做到这一点。您可能可以使用 Reflection 拼凑出一些东西,但这会付出更多的努力而不值得。

因此,我们需要创建自己的调度表:

// class member
var jumptbl = new SortedList<string, Func<string, string> >();

// : (in ctor)
jumptbl.Add("Test", Test);

// : (I'm guessing this is in a Click handler)
tbResult.Text = jumptbl[tbFunction.Text](tbArgument.Text)

更进一步,用于调用它的名称(在字符串中)不需要与函数本身的名称有任何联系。该方法甚至不必有名称:

jumptbl.Add("Func1", s=> s + "1");
jumptbl.Add("Func2", s=> s + "2");
jumptbl.Add("Func3", s=> s + "3");

关于c# - 以字符串作为索引和函数指针或委托(delegate)作为值的 SortedList?和通过字符串调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com