我有这样的代码:
public static IEnumerable<IntEx> FibbonacciNumbersStr()
{
IntEx j = 0;
IntEx i = 1;
for (Int64 k = 0; k < Int64.MaxValue; k++)
{
yield return j;
IntEx oldi = i;
i = i+j;
j = oldi;
}
}
IntEx是一个定制的&#39; int&#39;类能够计算巨大的数字并将它们写成任何给定数字基数的字符串,这里的问题是,当我说IntEx oldi = i时,oldi将成为我的指针并最终没有达到其目的,(因此使得斐波那契序列完全错了。如果我这样做,那么
public static IEnumerable<IntEx> FibbonacciNumbersStr()
{
IntEx j = 0;
IntEx i = 1;
for (Int64 k = 0; k < Int64.MaxValue; k++)
{
yield return j;
IntEx oldi = new IntEx(i);
i = i+j;
j = oldi;
}
}
效果很好。
有没有办法可以使用simple =运算符来重新实现第二个结果而不是指向,从而更好地模仿Int64的行为或其他什么? 我的意思是,这里的重点是我可能最终想要将这些代码分发给其他人一起工作,他们可能最终会指出这一点而不是一个新的价值。使用IntEx类时出现问题-_-
有什么想法吗?
答案 0 :(得分:0)
无法覆盖C#中的=
行为。如果IntEx
是class
类型,则赋值将始终使LHS引用与RHS相同的值。
这可以通过在等式中插入struct
来解决。在struct
分配中,字段在LHS
和RHS
之间按成员身份进行复制。它仍然无法定制,但确保了值的分离
答案 1 :(得分:0)
您始终可以创建静态方法来设置值。
因此,这种解决方案可行。
IntEx.SetValue(i);
或使IntEx生成实例不是通过创建新的实例,而是为它创建一个静态方法。
IntEx.CreateInstance(i);