sách gpt4 ăn đã đi

c# - 静态 IEnumerable?

In lại Tác giả: Walker 123 更新时间:2023-11-30 17:20:54 27 4
mua khóa gpt4 giày nike

我正在尝试制作一个字符串枚举。这是我到目前为止所得到的,

private class TypedEnum : IEnumerable
{
public IEnumerator GetEnumerator()
{
return GetType().GetFields().Where(f => f.IsLiteral).Select(f => f.GetValue(null)).OfType().GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}

private static class Combinators : TypedEnum
{
public const char DirectChild = '>';
public const char NextAdjacent = '+';
public const char NextSiblings = '~';
public const char Descendant = ' ';
}

但这有两个问题。 (1) 它不会编译,因为 Combinators 是静态的......我可以删除它并隐藏 c'tor。 (2) 除非我实例化它,否则它是不可枚举的,我不需要也不想这样做。我有哪些选择?忘了让它可枚举?


我认为这是我能得到的最接近的

public struct Combinators
{
public const char DirectChild = '>';
public const char NextAdjacent = '+';
public const char NextSiblings = '~';
public const char Descendant = ' ';

public static IEnumerable ToEnumerable()
{
return typeof(Combinators).GetFields().Where(f => f.IsLiteral)
.Select(f => f.GetValue(null)).OfType();
}
}

但我希望我可以将 ToEnumerable() 方法放在子类中:(

câu trả lời hay nhất

哈!解决了!

public class TypedEnum
{
public static IEnumerable ToEnumerable()
{
return typeof (TBase).GetFields(BindingFlags.Public | BindingFlags.Static)
.Select(f => f.GetValue(null)).OfType();
}

public static TValue[] ToArray()
{
return ToEnumerable().ToArray();
}

public static string Pattern
{
get
{
return string.Format("(?:{0})", string.Join("|", ToEnumerable().Select(c => Regex.Escape(c.ToString()))));
}
}
}

public class Combinators : TypedEnum
{
public const char DirectChild = '>';
public const char NextAdjacent = '+';
public const char NextSiblings = '~';
public const char Descendant = ' ';
}

只需将类本身作为类型传递给 TypedEnum

关于c# - 静态 IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898515/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress