C# 在尝试递归使用泛型委托时,不必初始分配泛型委托
我刚刚在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
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);
}
};
我不能告诉你为什么会这样,但我已经遇到很多次了 在变量初始值设定项中,尚未分配变量。请参见变量初始值设定项内部,变量尚未赋值。请参阅可能的副本可能的副本