【发布时间】:2023-03-22 07:55:01
【问题描述】:
我有这样的代码:
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 是一个自定义的“int”类,能够计算巨大的数字并将它们写成任何给定数字基数的字符串,这里的问题是,当我说 IntEx oldi = i 时,oldi 将成为 i 的指针并结束没有达到它的目的,(从而使斐波那契序列完全错误。但是,如果我这样做了
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;
}
}
效果很好。
有什么方法可以让我使用简单的 = 运算符重新实例化而不是指向第二个结果,从而更好地模仿 Int64 或其他东西的行为? 我的意思是,这里的重点是我可能最终想要分发此代码以供其他人使用,并且在使用 IntEx 类时他们可能最终会遇到“指向而不是成为新值”的问题 -_-
有什么想法吗?
【问题讨论】:
-
人们不得不想知道
IntEx的存在是为了什么 - 如果您正在寻找一个任意大的整数值,那么从 .NET 4 开始,BCL 中就已经存在一个:msdn.microsoft.com/en-us/library/…。 -
我不确定,但主要用于自定义基础转换,例如四元基础“ASDF”,A 为 0,S 为 1,D 为 2,F 为 3,并且能够转换为任何自定义基础以及提高我个人对数字基础和转换的了解,我这样做主要是为了好玩。
标签: c# instantiation assignment-operator