我有这个枚举:

public enum PTI
{
    UserInput = 0,
    Five = 5,
    Ten = 10,
    Fifteen = 15
}

public static partial class Extensions
{
    public static string Text(this PTI time)
    {
        switch (time)
        {
            case PTI.UserInput: return "User Input";
            case PTI.Ten: return "10 seconds";
            case PTI.Five: return "5 seconds";
            case PTI.Fifteen: return "15 seconds";
        }
        return "";
    }
}


这是一个简单的案例,但我以它为例。在我的代码中,我需要将枚举的值传递给函数,因此我想到了:

if (selectedIndex == 1) App.DB.UpdateSetting(Settings.Pti, PTI.UserInput);
if (selectedIndex == 2) App.DB.UpdateSetting(Settings.Pti, PTI.Five);
if (selectedIndex == 3) App.DB.UpdateSetting(Settings.Pti, PTI.Ten);
if (selectedIndex == 4) App.DB.UpdateSetting(Settings.Pti, PTI.Fifteen);


这不理想。也许Case在这里会有所帮助,但我的意思是,我得到的只是一个1到4之间的数字,因此我需要获取ENUM值。

有没有某种方法可以从if或case构造的情况下从selectedIndex的值中获取ENUM值?

背景-这是selectedIndex值的来源。来自Xamarin Form XAML中的选择器

<Picker x:Name="ptiPicker" IsVisible="false" SelectedIndexChanged="ptiOnPickerSelectedIndexChanged">
                                            <Picker.Items>
                                                <x:String>User input</x:String>
                                                <x:String>5 seconds</x:String>
                                                <x:String>10 seconds</x:String>
                                                <x:String>15 seconds</x:String>
                                            </Picker.Items>
                                        </Picker>


注意:

如果可能的话,我很乐意为枚举添加一些扩展方法,如果这将有助于获得所需的信息。只是不确定该怎么做。

最佳答案

您正在尝试获取Enum值的索引。

// Below code sample how to find the index of Enum.
// Sample to show how to find the index of item
PTI p = PTI.Ten;
int index = Array.IndexOf(Enum.GetValues(p.GetType()), p);
Console.WriteLine(index); // Output: 2 because of value PTI.Ten


因此,最终的解决方案是用一个语句替换所有if语句。

PTI pti = (PTI)(Enum.GetValues(typeof(PTI))).GetValue(selectedIndex-1); // selectedIndex-1 because the index is 0 based.
App.DB.UpdateSetting(Settings.Pti, pti);

关于c# - 有没有一种方法可以通过序列中的数字获取Enum值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44994971/

10-11 23:55