-1

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

    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);

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

你能给出任何想法和解决方案吗....

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

4

2 回答 2

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");
}

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

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...>
 }
于 2013-09-05T15:05:20.240 回答
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将比 a 执行得更快,考虑实例化Dictionary后代码量大致相同。Dictionary

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


如果由于某种原因, " Sort" 不能有 a MemberofModelValue而它必须是 a string,你可以GetStoredParamter像这样改变

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

        case "Status":
            return "TransactionStatusTypeName";

        ...
    }
}
于 2013-09-05T14:36:49.860 回答