StaticMemberEnum.Generator 1.0.0

dotnet add package StaticMemberEnum.Generator --version 1.0.0                
NuGet\Install-Package StaticMemberEnum.Generator -Version 1.0.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="StaticMemberEnum.Generator" Version="1.0.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件以引用此包。
paket add StaticMemberEnum.Generator --version 1.0.0                
#r "nuget: StaticMemberEnum.Generator, 1.0.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将其复制到交互式工具或脚本的源代码中引用此包。
// Install StaticMemberEnum.Generator as a Cake Addin
#addin nuget:?package=StaticMemberEnum.Generator&version=1.0.0

// Install StaticMemberEnum.Generator as a Cake Tool
#tool nuget:?package=StaticMemberEnum.Generator&version=1.0.0                

静态属性枚举生成器

为什么

枚举非常强大,但数据通常有一组已知的值,并且应允许未知值。

这可以通过在类型上使用静态成员来实现。例如 System.Drawing.Color。更多示例和探索请见 此处

但这也有一些缺点,例如无法列出已知值,除非为每个类型编写样板代码。

这正是这个库解决的问题。它使用了新的 C# 9 源生成器 来自动添加一个 .KnownValues(),包括所有与包含声明具有相同类型的静态成员。

示例。

namespace Some.Namespace{
	[StaticMemberEnum]
	partial class GolfClubTypes{
		private readonly string _id;
		public GolfClubTypes(string id) => _id = id;
		public static GolfClubTypes Driver = new GolfClubTypes("Driver");
		public static GolfClubTypes Iron = new GolfClubTypes("Iron");
		public static GolfClubTypes Wedge = new GolfClubTypes("Wedge");
		public static GolfClubTypes Hybrid = new GolfClubTypes("Hybrid");
		public static GolfClubTypes Wood = new GolfClubTypes("Wood");
	}
}

该库生成

namespace Some.Namespace{
	partial class GolfClubTypes{
		public static IEnumerable<GolfClubTypes> KnownValues(){
			return new []{Driver, Iron, Wedge, Hybrid, Woood};
		}
	}
}

这样您就可以调用

IEnumerable<GolfClubTypes> clubs = GolfClubTypes.KnownValues();

一些潜在的问题

  • 成员枚举定义必须是部分的,因为源生成器的行为与新添加源文件相似。
  • 当前此生成器不支持嵌套类。它需要整个类层次结构的部分。这似乎做得不好,所以我决定不支持它。如果在 github issues 中您有理由让我改变主意,请告知。
  • 默认情况下,类不会具有基于值的相等行为,结构体也不会默认定义 ==。我推荐使用记录。
    • 如果您仍然想使用类或结构体,可以使用生成器,例如 Generator.Equals
    • 结构体应仅用于非常小的值(小于 16 字节)。请参阅 官方解释
产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
有关 目标框架.NET Standard 的信息。
  • .NETStandard 2.0

    • 无依赖。

NuGet 包

此包未由任何 NuGet 包使用。

GitHub 仓库

此包未由任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.0.0 355 12/29/2020