
# 处理 null 值 - 产品需求文档

## 概述
- **Summary**: 修改 CSharpStringExtractor 类，使其在处理 null 值时保持原样而不是错误地添加 .TR() 后缀。
- **Purpose**: 确保当字符串表达式字面量为 null 时，代码不会对其进行转换，保持 null 的原始状态，以通过相关测试用例。
- **Target Users**: 使用该工具进行 C# 代码国际化处理的开发人员。

## 目标
- 正确处理 null 值，不对 null 进行任何转换
- 确保转换后的代码与原始代码保持一致（null 保持为 null）
- 通过测试用例 "should handle null"

## 非目标
- 不修改其他字符串处理逻辑
- 不改变其他关键字（如 true、false）的行为
- 不引入新的功能

## 背景与上下文
- 当前代码在处理值为 null 的文本赋值（如 `m_text_notice.text = null;`）时，错误地将 null 转换为 null.TR()
- 这导致了测试用例失败，因为期望 null 保持原样不转换
- 需要修改相关处理逻辑，识别 null 关键字并跳过对它的转换

## 功能需求
- **FR-1**: 代码应该能够识别 null 值
- **FR-2**: 当处理 null 时，不应该添加 .TR() 后缀
- **FR-3**: 处理 null 后的 convertedCode 应该仍然是 "null"

## 非功能需求
- **NFR-1**: 保持现有功能的性能不受影响
- **NFR-2**: 不破坏现有的其他测试用例

## 约束
- **技术**: 必须严格使用 TypeScript 语言语法
- **技术**: 不能使用 &lt;、&amp;、&gt; 等 HTML 符号
- **技术**: 不能使用 arguments 等保留字段作为局部变量名

## 假设
- 只有 null 关键字需要特殊处理，其他值正常处理
- 不改变 true、false 等其他关键字的行为

## 验收标准

### AC-1: null 值保持原样
- **Given**: 存在包含 `m_text_notice.text = null;` 这样语句的 C# 代码
- **When**: 使用 extractor.extractStrings(code) 处理该代码
- **Then**: 
  - 生成的 snippet 的 originalCode 应该是 "null"
  - convertedCode 应该仍然是 "null"
  - isChanged 应该为 false
  - literals 应该是空数组
- **Verification**: `programmatic`
- **Notes**: 通过 test/CSharpStringExtractor.test.ts#L2655-2671 中的测试用例验证

## 待解决问题
- [ ] 无待解决问题

