我想清理代码并使代码更简单。现在,我有一个返回和int值的方法。
private int ReturnMyValue(string line)
{
switch (line)
{
case "ST":
return 1;
case "KG":
return 2;
case "M":
return 3;
case "M2":
return 4;
(...)
}
}
在此之前,我从文件中读取了一个字符串数组,因此看起来像这样:
var myString = "";
var splittedString = myString.Split('|');
var iWantThatValue = ReturnMyValue(splitted[0]);
有没有办法像这样的枚举:
private enum Value
{
ST = 1,
KG = 2
}
并以某种方式摆脱该方法?
当iWantThatValue
等于“ ST”时,我希望我的splitted[0]
为1。
答案 0 :(得分:3)
您可以将字符串解析为枚举,例如
public enum Value
{
ST = 1, // start at 1
KG,
M,
M2
}
var value = (Value)Enum.Parse(typeof(Value), "KG");
并获取整数值...
var intValue = (int)val;
答案 1 :(得分:1)
if(Enum.TryParse<Value>(splitted[0], out var iWantThatValue)){...}
答案 2 :(得分:0)
我不确定枚举是否是正确的工具。枚举器是编译时间常数。如果您希望某些内容在运行时不会更改,则只读是另一种选择。我的意思是,如果您需要对那些(用户输入)字符串进行本地化怎么办?如果您希望在每次加载时更改可能的值怎么办?枚举器不支持。
通常,我更喜欢将Collection替换为switch / case语句。对于您的特定情况,使用string []就足够了:您将行用作值,将返回值用作Index。但是您可以通过使用Dictionary或类似的工具来获得更高的成就。
您的情况很糟糕,因为我们不知道周围的要求。
答案 3 :(得分:0)
您可以使用Convert.ToInt32从枚举转换为Int
示例:https://rextester.com/ETB25701
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
Console.WriteLine(Convert.ToInt32(Value.ST));
}
}
public enum Value
{
ST = 1,
KG = 2
}
}
答案 4 :(得分:0)
您的方法可以归结为:
private int ReturnMyValue(string line)
{
return intValue.ContainsKey(line)
? intValue[line]
: -1; //Or any other default value
}
通过使用Dictionary / HashMap。
将转换案例转换为intValue
映射中的条目:
{
{"ST", 1},
{"KG", 2},
.
.
}
答案 5 :(得分:0)
如果您可以稍微更改设计,则Enum.Parse可能是一个很好的解决方案。
[Flags]
枚举,其值应为2的幂(0x01
,0x02
,0x04
等)。|
)更改为使用逗号(,
)代码最终是:
[Flags]
public enum Value
{
ST = 0x01,
KG = 0x02,
M = 0x04,
M2 = 0x08,
//etc
}
然后:
const string valueChoices = "ST,M2";
Value values = (Value) Enum.Parse(typeof(Value), valueChoices);
Debug.WriteLine(values);
如果您在上方查看values
的值,它将是ST | M2
,或者作为一个整数:9
。如果您在“输出”窗口中查看,则会看到:ST, M2