我已如下定义Enum
和Dictionary
。
现在在Dictionary
中,我想使用Key
Value
中获取Linq
enum Devices
{
Fan,
Bulb,
Mobile,
Television
};
Dictionary<int, Devices> dctDevices = new Dictionary<int, Devices>()
{
{1, Devices.Fan},
{2, Devices.Bulb},
{3, Devices.Mobile},
{4, Devices.Television}
};
我想要如下结果。我需要下面的具体方法。
int key = GetKeyFromValue(Devices.Bulb);
请建议我执行此操作的最佳方法。预先感谢
答案 0 :(得分:1)
该方法可能类似于:
int GetKeyFromValue(Devices device)
{
return dctDevices.Keys
.Where(k => dctDevices[k] == device)
.DefaultIfEmpty( -1 ) // or whatever "not found"-value
.First();
}
或任何类型的通用扩展方法:
public static TKey GetKeyByBalue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TValue value, TKey notFoundKey, IEqualityComparer<TValue> comparer = null)
{
if (comparer == null)
comparer = EqualityComparer<TValue>.Default;
return dict.Keys.Where(k => comparer.Equals(dict[k], value)).DefaultIfEmpty(notFoundKey).First();
}
请注意,如果您想经常查找该值,则应该使用其他字典:
Dictionary<Devices, int> DeviceKeys = new Dictionary<Devices, int>()
{
{Devices.Fan, 1}, // ...
};
然后,代码变得更加高效:
int key = DeviceKeys[Devices.Bulb];
或创建一个自定义类Device
,该类封装了ID和Devices
(及其他内容):
答案 1 :(得分:-1)
您可以按照以下方式进行操作:
dctDevices.AsEnumerable().Where(p => p.Value == Devices.Bulb).FirstOrDefault().Key;