如何通过get:set访问器根据产品ID返回对应产品分类名称
如何根据产品ID关联对应分类名称?
需求回顾
- 产品ID固定为4位有效格式:首字符小写字母,第二位是连字符,末尾两位数字(如
e-11、b-22) - 已知分类映射:
e-→ Electronicsb-→ Booksa-→ Apparelt-→ Toyso-→ Others
- 若产品ID前缀不在上述已知分类中,需将产品ID改为
o-+原数字部分(如q-23改为o-23),同时分类名称设为Others - 产品分类名称为只读属性,仅在设置产品ID时自动赋值
现有代码问题
你当前代码里的productCategoryName = (value[0]);只是取了产品ID的首字符,完全没有和categoryCodes、categoryNames两个数组做关联,所以无法正确映射分类名称。另外题目明确说输入的产品ID始终是有效格式,原代码里的else分支可作为兜底保留。
解决方案
核心思路是:提取产品ID的前缀(前两位,比如e-),在categoryCodes数组里查找这个前缀的索引,找到就用对应categoryNames的名称;没找到就用Others,同时修正产品ID。
修改后的完整代码如下:
public static string[] categoryCodes = { "e-", "b-", "a-", "t-", "o-" }; public static string[] categoryNames = { "Electronics", "Books", "Apparel", "Toys", "Others" }; private string productCategoryName; private string productID { get { return productID; } set { // 按题目要求,输入的value始终是有效格式,此判断可保留做兜底 if (value.Length == 4 && char.IsLower(value[0]) && value[1] == '-' && char.IsDigit(value[2]) && char.IsDigit(value[3])) { // 提取产品ID的前缀(前两位,比如"e-") string prefix = value.Substring(0, 2); // 查找前缀在categoryCodes中的索引 int index = Array.IndexOf(categoryCodes, prefix); if (index != -1) { // 找到对应分类,直接赋值 productID = value; productCategoryName = categoryNames[index]; } else { // 前缀不在已知分类中,修改产品ID并设置分类为Others string numberPart = value.Substring(2); productID = $"o-{numberPart}"; productCategoryName = categoryNames[4]; // 也可直接写"Others" } } else { // 处理无效格式的兜底逻辑 productID = "o-00"; productCategoryName = "Others"; } } }
关键代码解释
string prefix = value.Substring(0, 2);:提取产品ID的前两位作为分类前缀,比如从e-11中拿到e-int index = Array.IndexOf(categoryCodes, prefix);:用Array.IndexOf查找前缀在分类码数组中的位置,找到返回对应索引,没找到返回-1- 找到索引时,直接用
categoryNames[index]获取对应分类名称;没找到时,提取原ID的数字部分,拼接成o-xx格式的新ID,分类名称设为Others
内容的提问来源于stack exchange,提问作者Don Boss
相关产品推荐
相关产品推荐

