C# 如何将字典的键映射到变量
我正在创建一个单元测试,看看字典里面是否有某个键。以下是程序的一部分,该部分涉及将键/值对添加到字典:C# 如何将字典的键映射到变量,c#,unit-testing,dictionary,C#,Unit Testing,Dictionary,我正在创建一个单元测试,看看字典里面是否有某个键。以下是程序的一部分,该部分涉及将键/值对添加到字典: public void Subscribe(EvtId inEvent, EvtDelegate inCallbackMethod) { if(mEventMap.ContainsKey(inEvent)) { mEventMap[inEvent] += inCallbackMethod; }
public void Subscribe(EvtId inEvent, EvtDelegate inCallbackMethod)
{
if(mEventMap.ContainsKey(inEvent))
{
mEventMap[inEvent] += inCallbackMethod;
}
else
{
mEventMap.Add(inEvent, inCallbackMethod);
}
}
下面是一段单元测试代码:
public void SubscribeTest()
{
EventHandlerCs target = new EventHandlerCs(eLayer.1stLayer);
target.Subscribe(EvtId.AccessChange, AccessChangeVT);
EventHandlerCs_Accessor target2 = new EventHandlerCs_Accessor(eLayer.1stLayer);
EvtId expectedEvt = EvtId.AccessChange;
EvtId actualEvt;
if (target2.mEventMap.ContainsKey(EvtId.AccessChange))
{
// ???
// Assert.AreEqual(expectedEvt, actualEvt);
}
}
如何将键/键本身的实际值(一旦我使用ContainsKey
方法在字典中找到它)映射到单元测试代码中的actualvt
变量
如果需要,请随时询问有关该问题的更多信息
更新:所讨论的字典设置为
private
,所以这就是我必须使用访问器的原因。这不就是target2.mEventMap[EvtId.AccessChange]
吗?我会在字典上使用TryGetValue函数。这里可以找到一个很好的解释
类程序
{
静态void Main()
{
var d=新字典();
d、 添加(“键”,0);
//此代码执行两次哈希查找。
int值;
if(d.TryGetValue(“键”,输出值))
{
d[“键”]=值+1;
}
}
}
调用TryGetValue检查键是否存在,如果存在,则检索值,而不是使用包含进行检查
if (target2.mEventMap.TryGetValue(EvtId.AccessChange, out actualEvt))
{
Assert.AreEqual(expectedEvt, actualEvt);
}
我也是这么想的,但不可能这么容易。问题中肯定还有其他问题没有明确说明。我知道,但我想我还是应该问:)我已经尝试过了,但它所做的是获取与键关联的值@siride,你有什么想法?我非常愿意澄清这个问题。但密钥的值不是总是
EvtId.AccessChange
?@GlennSlaven-对不起,你把我弄丢了>\ulol一旦它出现在字典里,是的,它总是EvtId。AccessChange
TryGetValue
获取与键关联的值。我对键的值不感兴趣,我只对键本身感兴趣。你已经有了键,它基于你在Containeskey中搜索的键。您已经拥有的密钥与字典中的密钥相同。
if (target2.mEventMap.TryGetValue(EvtId.AccessChange, out actualEvt))
{
Assert.AreEqual(expectedEvt, actualEvt);
}