C# 创建一个方法列表,从中选择并获取它们在c中的参数数量#

C# 创建一个方法列表,从中选择并获取它们在c中的参数数量#,c#,methods,C#,Methods,我正在创建一个类似于卡尔·西姆斯创建的项目。根据Sims发表的文章,我了解到为了给生物创造一个“大脑”,我需要创造一种神经网络,在这种情况下,它是一个有向节点图。我不会详细介绍整个网络的工作方式 我需要创造神经元,神经元是接收一些输入值并根据其功能产生另一个值的节点。它们可以指向,并指向一个或多个其他节点。每个神经元也有一个用来产生其价值的函数。创建网络的第一步是实例化没有指针的神经元,然后给每个神经元一个函数,然后将神经元的指针指向其输入(网络中的其他节点)。我的问题是我无法将所选函数与所需的

我正在创建一个类似于卡尔·西姆斯创建的项目。根据Sims发表的文章,我了解到为了给生物创造一个“大脑”,我需要创造一种神经网络,在这种情况下,它是一个有向节点图。我不会详细介绍整个网络的工作方式

我需要创造神经元,神经元是接收一些输入值并根据其功能产生另一个值的节点。它们可以指向,并指向一个或多个其他节点。每个神经元也有一个用来产生其价值的函数。创建网络的第一步是实例化没有指针的神经元,然后给每个神经元一个函数,然后将神经元的指针指向其输入(网络中的其他节点)。我的问题是我无法将所选函数与所需的参数数量联系起来

例如,假设神经元可以有以下3种功能:

公共浮点Sum2(浮点a、浮点b)
{
返回a+b;
}
公共浮点数Mul3(浮点数a、浮点数b、浮点数c)
{
返回a*b*c;
}
公共浮动阈值(浮动a){
如果(a>0.5)
返回a;
返回0;
}
在代码的某个地方,我需要一个类似于以下内容的类:

类数据{
FunctionIdendifier func;//指向函数Sum2、Mul3或Threshold之一的对象。通过它,我可以很容易地找到原始方法。
整数输入;
}
我曾想过创建一个字典,其中键是函数,值是参数量,但这似乎太复杂了,还存在人为错误的空间


提前感谢:)

数组作为输入怎么样。但它总是期望浮点数据类型

float SumN(float[] args)
{
    return args.Sum();
}

float MulN(float[] args)
{
    return args.Aggregate((s, x) => s * x);
}

float Threshold(float[] args)
{
    if (args.Length != 1)
    {
        throw new InvalidOperationException();
    }
    float value = args[0];
    return value > 0.5 ? value : 0f;
}

class NeuronData
{
    Func<float[], float> func;

    public NeuronData(Func<float[], float> func)
    {
        this.func = func;
    }
}
float SumN(float[]args)
{
返回args.Sum();
}
float MulN(float[]args)
{
返回参数聚合((s,x)=>s*x);
}
浮动阈值(浮动[]参数)
{
如果(args.Length!=1)
{
抛出新的InvalidOperationException();
}
浮点值=args[0];
返回值>0.5?值:0f;
}
类神经元数据
{
Func Func;
公共数据(Func Func)
{
this.func=func;
}
}

我使用了类似于@Posix的方法,我将发布完整解决方案的代码。这里创建了10个神经元,并从字典中分配了一个随机函数,其中包括一个函数作为键,参数量作为值

类程序
{
静态void Main(字符串[]参数)
{
对于(int i=0;i<10;i++)
{
神经元n=新神经元();
}
}
}
职能经理:

public委托浮点神经函数(params float[]输入);
公共类函数管理器
{
私有静态随机兰德=新随机();
私有静态FunctionManager单例=新FunctionManager();
专用词典功能dict;
私人职能经理(){
functionDict=新字典();
功能指令添加(阈值,1);
功能指令添加(Sum2,2);
功能指令添加(Mul3,3);
}
公共静态FunctionManager单例{get{return Singleton;}}
公共浮点Sum2(参数浮点[]输入)
{
//2输入
if(inputs.Length!=2)
抛出新的InvalidOperationException();
浮点n1=输入[0];
浮点n2=输入[1];
返回n1+n2;
}
公共浮点Mul3(参数浮点[]输入)
{
//3输入
如果(inputs.Length!=3)
抛出新的InvalidOperationException();
浮点n1=输入[0];
浮点n2=输入[1];
浮动n3=输入[2];
返回n1*n2*n3;
}
公共浮动阈值(参数浮动[]输入)
{
//1输入
if(inputs.Length!=1)
抛出新的InvalidOperationException();
浮点n1=输入[0];
如果(n1>0.5)
返回n1;
返回0;
}
公钥值对GetRandomFunction()
{                        
列表键=可枚举的ToList(functionDict.keys);
NeuralFunction函数=键[rand.Next(0,keys.Count)];
返回新的KeyValuePair(函数,functionDict[function]);
}
}    
神经元类:

类神经元
{
神经功能;
int参数值;
公共神经元()
{
KeyValuePair keyVal=FunctionManager.Singleton.GetRandomFunction();
函数=keyVal.Key;
paramAmount=keyVal.Value;
MethodInfo方法=function.method;
Console.WriteLine(“--Method:+Method.Name+”具有“+paramAmount+”参数”);
}
}

您可以使用反射来查找函数的参数。@H.G.Sandhagen我从未使用过反射,您可以指定吗?看看这是否有助于了解