枚举的通用扩展方法

时间:2017-08-09 10:37:15

标签: c# .net generics enums

我有问题。我想制作一个通用的方法来将我的错误枚举转换为特定的响应。 例如我的回复对象

public class ErrorResponse
{
    public ulong Code { get; set; }
    public string Description { get; set; }
    public string OrigionationSystem { get; set; }
}

我希望将所有错误转换为此回复 例如

public enum ProductErrors:ulong
{
    None, 
    [Description("Prouct Not Found")]
    ProductNotFound, 
    [Description("Invalid Product Isbn")]
    InvalidIsbn
}

public enum CustomerErrors:ulong
{
    None,
    AlreadyExists,
    InvalidEmailAddress
}

现在我想制作通用方法将我的枚举转换为ErrorResponse。 以前我使用此方法将我的错误代码转换为错误响应。

public static IList<ErrorResponse> ParseErrorCodeToErrorResponse(this IEnumerable<ProductErrors> errorCodes)
{
    return errorCodes.Select(x => new ErrorResponse
    {
        Code = (ulong)x,
        Description = x.GetDescription(),
        OriginatingSystem = Extensions.GetCurrentSystemName()
    } ).ToList();
}

问题在这里提出:

public static IList<ErrorResponse> ParseErrorCodeToErrorResponse<T>(this IEnumerable<T> errorCodes) where T : struct, IConvertible
{
    if (!typeof(T).IsEnum)
    {
        throw new ArgumentException("T must be an enumerated type");
    }
    return errorCodes.Select(x => new ErrorResponse
    {
        Code = (ulong)x,
        Description = x.GetDescription(),
        OriginatingSystem = Extensions.GetSystemName()
    }).ToList();
}

如果只有一个枚举,它的工作正常,但是当我把它变成通用时它会说

  

输入 T无法转换为ulong ,而 x.GetDescription()则表示无法解析 GetDescription()< /强>

0 个答案:

没有答案