这里我有一个方法,它将返回匹配的参数,只返回字符串作为返回类型,并且工作正常....
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);
但是我想在这种类型中使用枚举如何使用枚举这种类型的匹配参数,它将一个值作为输入参数并给出匹配值......
你会不会给这个想法和解决方案....
我也在寻找任何通用解决方案......
答案 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";
...
}
}