gpt4 book ai didi

c# - 表达式重载作为参数

转载 作者:行者123 更新时间:2023-11-30 17:18:35 24 4
gpt4 key购买 nike

我想找到一种方法将表达式(如果可能的话编译)作为参数传递给函数。表达式将始终返回相同的类型。我想将该表达式(函数)保存为参数。

如果可能的话,一个(简短的)例子将不胜感激。 :-)我不知道这是否可能。

更多信息:输入是一个表达式,其中只有返回类型应该是固定的。我需要一种方法来定义这种原型(prototype)。

方法调用示例:

public delegate double[] ValueRetreiverFunc(params object[] anyNumberOfParams);

public class Class1
{
public double[] Func()
{
double[] values = new double[1];
values[0] = 2.0;
return values;
}
}

public class Class2
{
public double[] Func(int n)
{
double[] values = new double[n];
for (int c = 0; c < n; c++)
{
values[c] = 3.0;
}
return values;
}
}

public class ClassTest
{
public ValueRetreiverFunc ValueRetreiverFunc { get; set; }

public void SetValueRetreiverFunc(ValueRetreiverFunc valueRetreiverFunc)
{
ValueRetreiverFunc = valueRetreiverFunc;
}

static void Test()
{
ClassTest classTest = new ClassTest();
Class1 class1 = new Class1();
Class2 class2 = new Class2();
classTest.SetValueRetreiverFunc(()=> class1.Func());
DoProcessArrayOfDouble(classTest.ValueRetreiverFunc());

classTest.SetValueRetreiverFunc(()=> class2.Func(7));
DoProcessArrayOfDouble(classTest.ValueRetreiverFunc());
}
}

最佳答案

我看得很远。我只需要使用“Func”。它就像一个魅力。这是我更正的样本...

public class Class1
{
public double[] GetValues()
{
double[] values = new double[1];
values[0] = 2.0;
return values;
}
}

public class Class2
{
public double[] GetValues(int n)
{
double[] values = new double[n];
for (int c = 0; c < n; c++)
{
values[c] = 3.0;
}
return values;
}
}

public class ClassTest
{
public Func<double[]> ValueRetreiverFunc;


public void SetValueRetreiverFunc(Func<double[]> valueRetreiverFunc)
{
ValueRetreiverFunc = valueRetreiverFunc;
}

public static void Test()
{
ClassTest classTest = new ClassTest();
Class1 class1 = new Class1();
Class2 class2 = new Class2();
classTest.SetValueRetreiverFunc(() => class1.GetValues());
DoProcessArrayOfDouble(classTest.ValueRetreiverFunc());

classTest.SetValueRetreiverFunc(() => class2.GetValues(7));
DoProcessArrayOfDouble(classTest.ValueRetreiverFunc());
}

static void DoProcessArrayOfDouble(double[] doubleArray)
{
foreach(double d in doubleArray)
{
Debug.Print(d.ToString());
}
}

}

关于c# - 表达式重载作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5596717/

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