是否可以为类型参数编写扩展?

问题描述 投票:0回答:1

我想转换这个方法

public static List<T> GetAllEnumValues<T>() where T : Enum
{
  return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}

进入扩展。

这样我就可以像这样使用它

Countries.GetAllEnumValues();
而不是这个
GenericMethods.GetAllEnumValues<Countries>()

有没有一种方法可以在不传递要扩展的类型的实例的情况下创建扩展?

我会想象这样的事情......

public static List<T> GetAllEnumValues<this T>() where T : Enum //not compiling for obvious reasons
{
  return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}
c# generics extension-methods
1个回答
2
投票

没有。

但是你可以导入静态成员:

using static GenericMethods;

GetAllEnumValues<Countries>();

您也可以全球范围内进行操作。例如在其他一些文件中,例如

GlobalImports.cs
:

global using static SomeNamespace.GenericMethods;

或通过.csproj:

<ItemGroup>
    <Using Include="SomeNamespace.GenericMethods" Static="True"/>
</ItemGroup>
© www.soinside.com 2019 - 2024. All rights reserved.