如何通过BannedApiAnalyzers仅禁止Dictionary索引器的setter?
仅禁用Dictionary索引器Setter的BannedApiAnalyzers配置方法
要单独禁止Dictionary<TKey,TValue>的索引器赋值操作(即dictionary[key] = value;),同时保留索引器的读取功能,你需要在BannedSymbols.txt中使用索引器Setter对应的元数据方法符号,并严格遵循格式要求:
正确配置步骤
- 打开项目中的
BannedSymbols.txt文件 - 添加以下内容(符号行和警告消息行要一一对应):
M:System.Collections.Generic.Dictionary`2.set_Item(`0,`1) 请勿使用索引器setter;请使用Add()或扩展方法Replace()明确表达意图。极少数需添加或替换的场景,请使用扩展方法AddOrReplace()。
为什么之前的配置无效?
- 使用
P:System.Collections.Generic.Dictionary2.Item(0)会禁用整个索引器属性,导致读取(get)和赋值(set)操作都被禁止,不符合你的需求。 - 之前的
M:System.Collections.Generic.Dictionary2.set_Item(0,1)配置未生效,大概率是符号格式细节出错:泛型参数标记2(表示该类型有2个泛型参数)、参数列表的(0,1)`(对应TKey和TValue类型)必须严格匹配元数据写法,不能有拼写或格式错误。
配置完成后重新编译项目,当开发者编写dictionary[key] = value;这类代码时,就会触发你指定的警告提示,而索引器的读取操作(如var val = dictionary[key];)不会受到影响。
内容的提问来源于stack exchange,提问作者Mike Nakis
相关产品推荐
相关产品推荐

