c# - 如何在 C# 中制作针对枚举的扩展
问题描述
我正在尝试做一个针对枚举类型的扩展,但它似乎只适用于枚举中的项目,而不是整个枚举本身。
枚举:
public enum Demo
{
ValueOne,
ValueTwo,
ValueThree
}
扩展名:
public static IEnumerable<TEnum> AsEnumerable<TEnum>(this TEnum source) where TEnum : Enum, IConvertible
{
if (!typeof(TEnum).IsEnum)
{
throw new ArgumentException();
}
foreach(TEnum item in Enum.GetValues(typeof(TEnum)))
{
yield return item;
}
}
这有效:
var demo = Demo.ValueOne.AsEnumerable();
但我正在寻找:
var demo = Demo.AsEnumerable();
我必须为此创建一个单独的方法,从而产生如下语法:
var test = EnumExtensionHelper<BaseAttributes>.AsEnumerable();
但是直接在对象上使用扩展方法会看起来和感觉更好
解决方案
感谢 madreflection 解决了。答案是
“您不能创建类型扩展方法,即向类型添加方法,就像您可以添加“实例”方法来扩展实例一样。扩展方法需要一个实例。” - 疯狂反思
推荐阅读
- node.js - Github 操作:无法安装私有 GPR npm 包
- kubernetes - 如何控制 kubernetes cronjobs 之间的间隔(即完成后的冷却时间)
- php - 在 Laravel 中将托管数据库复制到本地数据库
- sql - 如何组合具有不同列数的两个表SQL
- android - 表情符号未在 Flutter 应用程序中显示
- python - 每个单元格中索引值和列名之间具有日期差异的数据框
- swift - AVCaptureVideoPreviewLayer 不检测屏幕两个范围内的对象
- google-sheets - 在Google表格中将具有相同值的多个单元格与一个单元格合并以求平均值
- asp.net-mvc - 从 JsonApiDotNetCore 到 .NET Core 3.0 的迁移路径是什么?
- node.js - Docker / Kubernetes:试图擦除所有内容,但我仍然有一个在 localhost 上运行的容器,我无法使用 docker ps