C# 在尝试递归使用泛型委托时,不必初始分配泛型委托

C# 在尝试递归使用泛型委托时,不必初始分配泛型委托,c#,generics,recursion,delegates,C#,Generics,Recursion,Delegates,我刚刚在C#中发现了泛型委托,并在思考它们是否可以递归使用,我提出了一个简单的片段,它只返回一个有限的斐波那契数字符串 Func<int, int, string, string> Fibonanci; Fibonanci = delegate( int a, int b, string c ) { return ""; }; Fibonanci = delegate( int a, int b, string c ) { if( ( a == 0 ) &&a

我刚刚在C#中发现了泛型委托,并在思考它们是否可以递归使用,我提出了一个简单的片段,它只返回一个有限的斐波那契数字符串

Func<int, int, string, string> Fibonanci;
Fibonanci = delegate( int a, int b, string c )
{
    return "";
};
Fibonanci = delegate( int a, int b, string c )
{
    if( ( a == 0 ) && ( b == 0 ) )
    {
        b = 1;
        c += ( "0" + ( a.ToString() + b.ToString() ) ); 
    }
    else
    {
        c += ( a + b ).ToString();
    }

    if( ( a >= limit ) || ( b >= limit ) )
    {
        return ( c );
    }
    else
    {
        return Fibonanci( b, ( b + a ), c );
    }
};
Func Fibonanci;
Fibonanci=委托(整数a、整数b、字符串c)
{
返回“”;
};
Fibonanci=委托(整数a、整数b、字符串c)
{
如果((a==0)和&(b==0))
{
b=1;
c++=(“0”+(a.ToString()+b.ToString());
}
其他的
{
c+=(a+b).ToString();
}
如果((a>=限制)| |(b>=限制))
{
返回(c);
}
其他的
{
返回Fibonanci(b,(b+a),c);
}
};

这是我的代码,它运行良好,我要问的问题是,是否有方法删除第一个赋值(我得到错误,说我使用了未赋值变量)

从技术上讲,您可以这样赋值:

Func<int, int, string, string> Fibonanci = null;

从技术上讲,您可以这样分配:

Func<int, int, string, string> Fibonanci = null;

在你的斐波南西声明中。。。将其分配给null

Func<int, int, string, string> Fibonanci = null;

Fibonanci = delegate(int a, int b, string c)
{
    if ((a == 0) && (b == 0))
    {
        b = 1;
        c += ("0" + (a.ToString() + b.ToString()));
    }
    else
    {
        c += (a + b).ToString();
    }

    if ((a >= limit) || (b >= limit))
    {
        return (c);
    }
    else
    {
        return Fibonanci(b, (b + a), c);
    }
};
Func Fibonanci=null;
Fibonanci=委托(整数a、整数b、字符串c)
{
如果((a==0)和&(b==0))
{
b=1;
c++=(“0”+(a.ToString()+b.ToString());
}
其他的
{
c+=(a+b).ToString();
}
如果((a>=限制)| |(b>=限制))
{
返回(c);
}
其他的
{
返回Fibonanci(b,(b+a),c);
}
};

我不能告诉你为什么会这样,但我已经遇到很多次了

在你的Fibonanci声明中。。。将其分配给null

Func<int, int, string, string> Fibonanci = null;

Fibonanci = delegate(int a, int b, string c)
{
    if ((a == 0) && (b == 0))
    {
        b = 1;
        c += ("0" + (a.ToString() + b.ToString()));
    }
    else
    {
        c += (a + b).ToString();
    }

    if ((a >= limit) || (b >= limit))
    {
        return (c);
    }
    else
    {
        return Fibonanci(b, (b + a), c);
    }
};
Func Fibonanci=null;
Fibonanci=委托(整数a、整数b、字符串c)
{
如果((a==0)和&(b==0))
{
b=1;
c++=(“0”+(a.ToString()+b.ToString());
}
其他的
{
c+=(a+b).ToString();
}
如果((a>=限制)| |(b>=限制))
{
返回(c);
}
其他的
{
返回Fibonanci(b,(b+a),c);
}
};

我不能告诉你为什么会这样,但我已经遇到很多次了

在变量初始值设定项中,尚未分配变量。请参见变量初始值设定项内部,变量尚未赋值。请参阅可能的副本可能的副本