【问题标题】:Matching vb.net string value to c# enum将 vb.net 字符串值与 c# 枚举匹配
【发布时间】:2015-10-22 22:52:38
【问题描述】:

我正在使用在 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 它返回每个枚举的整数索引,“2”在这个案例。

我的问题是如何通过匹配字符串值来获取枚举,以便我可以将枚举传递给函数?因此,如果我的字符串值为“CRT”,如何从“CRT”字符串值中获取 ParamChildKey.Create?在这个例子中,我将 ParamChildKey.Create 传递给下面的函数。

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

【问题讨论】:

标签: vb.net c#-to-vb.net


【解决方案1】:

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

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

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

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

【讨论】:

  • 我想我可能只需要使用 Select-Case 语句。我希望有办法解决它。我现在被困在 .NET 3.5 上,所以我无法使用 TryParse。
【解决方案2】:

要将字符串转换为枚举,请使用 .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或更低版本,可以使用此版本https://stackoverflow.com/a/1082587/3230456

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多