C# 字典中的一个小知识点记录(字典赋值的两种方式区别)
最近在monogame游戏开发中,遇到了一个使用字典中的小细节
字典赋值的两种方式区别
这两行代码在功能上有重要区别:
_animations["Down"] = _playerDownMoveAnim.Animation;
_animations.Add("Down", _playerDownMoveAnim.Animation);
主要区别
1. 索引器赋值 (_animations["Down"] = value)
- 行为:如果键("Down")已存在,则覆盖该键对应的值;如果键不存在,则添加新键值对
- 异常:不会因为键已存在而抛出异常
- 适用场景:当你想要更新已存在的键值对,或者不确定键是否存在时
2. Add 方法 (_animations.Add("Down", value))
- 行为:如果键("Down")已存在,则抛出异常 (
ArgumentException);只有键不存在时才添加新键值对 - 异常:如果键已存在,会抛出
ArgumentException - 适用场景:当你确定键不存在,或者希望确保不会意外覆盖现有值时
实际应用示例
使用索引器(安全,允许覆盖)
// 初始化字典
_animations = new Dictionary<string, Animation>();
// 添加或更新动画
_animations["Down"] = _playerDownMoveAnim.Animation; // 添加
_animations["Down"] = updatedAnimation; // 更新 - 不会报错
使用 Add 方法(严格,防止意外覆盖)
// 初始化字典
_animations = new Dictionary<string, Animation>();
// 添加动画
_animations.Add("Down", _playerDownMoveAnim.Animation); // 成功添加
// 尝试再次添加相同键
try {
_animations.Add("Down", updatedAnimation); // 抛出 ArgumentException
}
catch (ArgumentException) {
Console.WriteLine("键 'Down' 已存在!");
}
在游戏开发中的建议
-
初始化阶段:使用
Add方法,确保不会意外覆盖已有的动画public void LoadContent() { _animations = new Dictionary<string, Animation>(); _animations.Add("Down", _playerDownMoveAnim.Animation); _animations.Add("Up", _playerUpMoveAnim.Animation); _animations.Add("Left", _playerLeftMoveAnim.Animation); _animations.Add("Right", _playerRightMoveAnim.Animation); } -
运行时更新:使用索引器,允许动态更新动画
public void ChangeAnimation(string direction, Animation newAnimation) { _animations[direction] = newAnimation; // 安全更新 } -
检查键是否存在:可以使用
ContainsKey方法if (!_animations.ContainsKey("Down")) { _animations.Add("Down", _playerDownMoveAnim.Animation); } else { // 处理键已存在的情况 }
总结
- 使用
字典[键] = 值当你想添加或更新值 - 使用
字典.Add(键, 值)当你只想添加新键值对,并且希望键重复时报错 - 在游戏开发中,通常初始化时使用
Add,运行时更新使用索引器
浙公网安备 33010602011771号