繁体   English   中英

具有Enum值类型的字典-为索引不在字典中调用索引器吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM