gpt4 book ai didi

.net 枚举的第一个和最后一个

转载 作者:行者123 更新时间:2023-12-04 22:09:20 25 4
gpt4 key购买 nike

.NET(或某种标准扩展方法)中有没有办法提出枚举问题?

例如当前项目是枚举中的第一个或最后一个项目:

string s = "";

foreach (var person in PeopleListEnumerator) {

if (PeopleListEnumerator.IsFirstItem) s += "[";

s += person.ToString();

if (!PeopleListEnumerator.IsLastItem) s += ",";
else s += "]";
}

最佳答案

只是为了好玩,一个不需要急切求值并且只有一个局部变量(枚举器除外)的一般问题的解决方案:

static class TaggedEnumerableExtensions
{
public class TaggedItem<T>
{
public TaggedItem(T value, bool isFirst, bool isLast)
{
IsFirst = isFirst;
IsLast = isLast;
Value = value;
}
public T Value { get; private set; }
public bool IsFirst { get; private set; }
public bool IsLast { get; private set; }
}
public static IEnumerable<TaggedItem<T>> ToTaggedEnumerable<T>(this IEnumerable<T> e)
{
using (var enumerator = e.GetEnumerator()) {
if (!enumerator.MoveNext())
yield break;
var current = enumerator.Current;
if (!enumerator.MoveNext()) {
yield return new TaggedItem<T>(current, true, true);
yield break;
} else {
yield return new TaggedItem<T>(current, true, false);
}

for (;;) {
current = enumerator.Current;
if (!enumerator.MoveNext()) {
yield return new TaggedItem<T>(current, false, true);
yield break;
}
yield return new TaggedItem<T>(current, false, false);
}
}
}
}

测试:
class Program
{
static void Main(string[] args)
{
foreach (var item in Enumerable.Range(0, 10).ToTaggedEnumerable()) {
Console.WriteLine("{0} {1} {2}", item.IsFirst, item.IsLast, item.Value);
}
}
}

关于.net 枚举的第一个和最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com