Если след вашего метода должен точно соответствовать тому, что вы показываете, то это невозможно сделать. Потому что вы не можете наследовать String
и создавать новый лучший тип, который будет работать для> 2GB
Если ваше предположение о максимальном входном значении n
неверно, то вы можете предоставить рабочее решение, соответствующее площади. Например, максимальное значение n
было 10000
или что-то очень маленькое.
Однако я думаю, что подход IEnumerable<char>
, предложенный @MikeSamuel, является единственным ответом, который представит работающее решение, возвращающееся близко к заявленным требованиям.
Поскольку вы отметили это c# 4.0
Скорее всего, они искали решение, которое использовало бы синтаксис yield
, такой как:
static IEnumerable convtostr(int n)
{
for (int i = 1; i < n; i++)
yield return string.Format("{0}, ", i.ToString());
yield return n.ToString();
}
затем вы можете объяснить, что вы используете его следующим образом
int input = 1000000000; // 1 billion.
foreach (var value in convtostr(input))
{
Console.Write(value );
}
И, вероятно, они хотели, чтобы вы ответили. Поскольку это будет работать с очень небольшим количеством активной памяти, фактически не сохраняя всю последнюю строку в памяти.
Редактировать: еще один ответ, аналогичный предложенному @suddnely_me, - вместо этого передать действие для каждого числа, например:
static void convtostr(int n, Action<int> action)
{
for (int i = 1; i <= n; i++)
action(i);
}
Затем вызывается с помощью:
int input = 1000000000; // 1 billion.
convtostr(input, n =>
{
if (n < input) { Console.Write("{0}, ", n); }
else { Console.Write(n); }
});
Что на самом деле будет работать почти так же, как при использовании синтаксиса yield
.