2015-10-22 63 views
0

我使用的是用C#創建一個枚舉:匹配vb.net字符串值,以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」的字符串值然而,當我使用[枚舉] .GetValues它返回每個枚舉,「2」,在這種情況下的整數索引。

我的問題是如何通過匹配字符串值來獲得枚舉,所以我可以將枚舉傳遞給函數?所以如果我有一個字符串值「CRT」我怎麼從「CRT」字符串值ParamChildKey.Create?在這個例子中,我將傳入ParamChildKey.Create到下面的函數中。

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

enum.ToObject ?? https://msdn.microsoft.com/en-us/library/system.enum.toobject%28v=vs.110%29.aspx –

回答

0

EnumMemberAttribute用於序列化目的。所以它在你的場景中沒有用處。

IMO最簡單的解決方案是寫一個swtich-case語句。

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

如果你有一組動態隨時間變化枚舉,你可以使用的System.Reflection庫,但這個執行不是靜態編寫和編譯代碼差很多。

+0

我想我可能只需要使用Select-Case語句。我希望有一種解決辦法。我現在被困在.NET 3.5上,所以TryParse對我來說不可用。 – Mark

0

要將字符串轉換爲一個枚舉,使用[Enum].TryParse方法,它是在.NET中可用4

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