[英]Dictionary with Enum value type - calling the indexer for a key not in the dictionary?
我遇到一个小问题。 我有
IDictionary<Something,MyEnum> map;
我想写一个方法:
MyEnum GetMapping(Something x);
使用有点像:
MyEnum e = GetMapping(x)
if(e!=null){...}
但是当然,问题在于,由于MyEnum
是基于int
的标准Enum
,因此GetMapping
无法返回null。 必须添加一个单独的DoesMappingExist
方法似乎很麻烦,是否有一种巧妙的方法可以解决此问题?
而且, map[AnObjectNotInTheMap]
实际返回的内容是什么-只是Default(MyEnum)
即0
?
只需使用可为空的枚举即可:
IDictionary<Something,MyEnum?> map;
您的方法也将更改为:
MyEnum? GetMapping(Something x);
您可以使用Nullable<T>
将值类型用作nullable,这是T?
的简写T?
。
因此,您的代码应如下所示:
MyEnum? GetMapping(Something x)
{
if (...) return MyEnum.SomeValue;
if (...) return MyEnum.OtherValue;
return null;
}
然后,像这样使用它:
MyEnum? e = GetMapping(x);
if(e.HasValue)
{
var mapped = e.Value;
...
}
Enum的默认值为0。因此,您没有将0分配给MyEnum的任何成员,0表示没有映射。 除非必须在MyEnum中分配0,否则这应该是最简单的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.