我有这个枚举:
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/