将 vb.net 字符串值匹配到 C# 枚举

Matching vb.net string value to c# enum

我正在使用在 c# 中创建的枚举:

public enum ParamChildKey
{
    [EnumMember(Value = "SYS")]
    System,
    [EnumMember(Value = "GAT")]
    Gate,
    [EnumMember(Value = "CRT")]
    Create,
    [EnumMember(Value = "FLT")]
    Fault,
}

我正在 vb.net 中编写代码并有一个 vb.net 字符串,比如说 "CRT" 我正在尝试与其枚举匹配,以便我可以将枚举传递给函数.

当我写 ParamChildKey.Create.ToValue 时,我得到一个 "CRT" 的字符串值,但是当我使用 [Enum].GetValues 时,它 returns每个枚举的整数索引,在本例中为“2”。

我的问题是如何通过将字符串值与其匹配来获取枚举,以便将枚举传递给函数?那么如果我有一个 "CRT" 的字符串值,我如何从 "CRT" 字符串值中得到 ParamChildKey.Create?在这个例子中,我将把 ParamChildKey.Create 传入下面的函数。

GetParameterValue(paramName As Integer, Optional paramChildKey As ParamChildKey = ParamChildKey.System)

要将字符串转换为枚举,请使用 .NET 4 中提供的 [Enum].TryParse 方法。

Dim p As ParamChildKey
If [Enum].TryParse("CRT", p) Then
    Console.WriteLine(p)
    Console.WriteLine(p.ToString())
End If

如果使用 .NET 3.5 或以下版本,您可以使用此版本

EnumMemberAttribute 用于序列化目的。所以它在你的场景中没有用。

IMO 最简单的解决方案是编写 swtich-case 语句。

switch(textValue){
    case "CRT":
       return ParamChildKey.Create;
    ...
}

如果你有一组随时间变化的动态枚举,你可以使用 System.Reflection 库,但这比静态编写和编译的代码性能差得多。