如何使用枚举获取匹配值

时间:2013-09-05 14:20:42

标签: c# .net enums

这里我有一个方法,它将返回匹配的参数,只返回字符串作为返回类型,并且工作正常....

    private static string GetSortedParameter(string modelValue)
    {
        string returnValue = null;
        if (modelValue == "UserId")
        {
            returnValue = "UsrID";

        }
        if (modelValue == "Status")
        {
            returnValue = "TransactionStatusTypeName";

        }
        if (modelValue == "ProjectCaseNumber")
        {
            returnValue = "PROJCASE";            
        }

        if (modelValue == "CP")
        {
            returnValue = "CPNumber";
        }
        if (modelValue == "ItemID")
        {
            returnValue = "ItemID";
        }
        if (modelValue == "TypeOfChange")
        {
            returnValue = "TransactionTypeName";
        }
        if (modelValue == "ChangeDescription")
        {
            returnValue = "TransactionTypeDescription";
        }
        if (modelValue == "CreatedOnEnd")
        {
            returnValue = "CreatedDateTime";
        }
        if (modelValue == "UpdatedOnEnd")
        {
            returnValue = "UpdatedDateTime";
        }
        if (modelValue == "Comment")
        {
            returnValue = "Comments";
        }

        return returnValue;

    }

这里我称之为

       if (request.Sorts != null && request.Sorts.Count > 0)
        {
            sortField = request.Sorts[0].Member;
            sortDirection = request.Sorts[0].SortDirection.ToString();
        }
         string SortFieldParameter = GetSortedParameter(sortField);

但是我想在这种类型中使用枚举如何使用枚举这种类型的匹配参数,它将一个值作为输入参数并给出匹配值......

你会不会给这个想法和解决方案....

我也在寻找任何通用解决方案......

2 个答案:

答案 0 :(得分:1)

如果您在描述中没有使用空格,可以使用两个枚举和交叉铸造作弊。

enum ModelValue
{
    UserId = 1,
    Status = 2,
    ProjectCaseNumber = 3,
    CP = 4,
    ItemId = 5,
    TypeOfChange = 6,
    ChangeDescription = 7,
    CreatedOnEnd = 8,
    UpdatedOnEnd = 9,
    Comment = 10
}

 enum SortedParameters {
        CUsrID = 1,
        TransactionStatusTypeName = 2,
        PROJCASE = 3,            
        CPNumber = 4,
        ItemID = 5,
        TransactionTypeName = 6,
        TransactionTypeDescription = 7,
        CreatedDateTime = 8,
        UpdatedDateTime = 9,
        Comments = 10
 }

然后您需要的只是

string GetSortedParameter(string value) {
  ModelValue modelValue;
  if (Enum.TryParse(value, out modelValue)) {
    return ((SortedParameters)(int)modelValue).ToString();
  }
  throw new ArgumentOutOfRangeException("Not a valid value");
}

为什么要使用枚举不是很清楚,或者您是否希望GetSortedParameter返回枚举?

SortedParameters GetSortedParameter(string value) {
  ModelValue modelValue;
  if (Enum.TryParse(value, out modelValue)) {
    return (SortedParameters)(int)modelValue;
  }
  throw new ArgumentOutOfRangeException("Not a valid value");
}

但是,你是否只想要字符串到字符串翻译Dictionary<string,string>会更好。

 static Dictionary<string,string> ModelToSortedParameter = new Dictionary<string,string> {
    { "UserId", "CUsrID" },
    { "Status", "TransactionStatusTypeName" },
    # <and so on...>
 }

然后你就做了

    SortFieldParameter = ModelToSortedParameter[sortField]; 

如果要优雅地处理缺失值,可以在带有密钥检查的函数中实现它。

此解决方案也适用于字符串到Enum

static Dictionary<string,SortedParameters> ModelToSortedParameter = new Dictionary<string,SortedParameters> {
    { "UserId", SortedParameters.CUsrID },
    { "Status", SortedParameters.TransactionStatusTypeName },
    # <and so on...>
 }

答案 1 :(得分:0)

首先这样做

enum ModelValue
{
    UserId,
    Status,
    ProjectCaseNumber,
    CP,
    ItemId,
    TypeOfChange,
    ChangeDescription,
    CreatedOnEnd,
    UpdatedOnEnd,
    Comment
}

然后这个

private static string GetSortedParameter(ModelValue value)
{
    switch(value)
    {
        case ModelValue.UserId:
            return "CUsrID";

        case ModelValue.Status:
            return "TransactionStatusTypeName";

        case ModelValue.ProjectCaseNumber:
            return "PROJCASE";            

        case ModelValue.CP:
            return "CPNumber";

        case ModelValue.ItemId:
            return "ItemID";

        case ModelValue.TypeOfChange:
            return "TransactionTypeName";

        case ModelValue.ChangeDescription:
            return  "TransactionTypeDescription";

        case ModelValue.CreatedOnEnd:
            return "CreatedDateTime";

        case ModelValue.UpdatedOnEnd:
            return "UpdatedDateTime";

        case ModelValue.Comment:
            return "Comments";

        default:
            throw new ArgumentOutOfRangeException("value");
    }
}

switch的执行速度比Dictionary更快,考虑Dictionary实例后,代码量大致相同。

如果直到运行时才知道这些值,则使用Dictionary


如果出于某种原因,“Sort”不能Member ModelValue而且必须是string,则可以更改{GetStoredParamter 1}}喜欢这个

private static string GetStoredParameter(string value)
{
    switch(value)
    {
        case "UserId":
            return "CUsrID";

        case "Status":
            return "TransactionStatusTypeName";

        ...
    }
}