输出System.Collections.Generic.List而非数据,修改代码后遇ArgumentNullException求助
问题分析与修复方案
我来帮你搞定这两个问题,咱们一个个拆解:
问题1:输出结果为System.Collections.Generic.List而非预期数据
这个问题的根源是:如果直接把List<string>对象传入Append方法,List的默认ToString()只会返回它的类型名称,而不是内部的元素内容。你后来改成用string.Join拼接元素的思路是对的,但没处理列表为null的情况,这就引发了第二个异常。
问题2:System.ArgumentNullException异常
当AllowPrefixes或DenyPrefixes为null时(比如使用构造函数默认参数创建实例时,这两个列表就是default(List<string>)也就是null),会触发两种问题:
- 如果直接调用
AllowPrefixes.ToList(),会因为AllowPrefixes是null抛出NullReferenceException - 就算去掉
.ToList(),直接把null集合传给string.Join,也会因为该方法不接受null参数而抛出ArgumentNullException
修复后的完整代码
public partial class IndexingPolicy : IEquatable<IndexingPolicy> // 补充缺失的泛型参数 { public IndexingPolicy(List<string> allowPrefixes = default(List<string>), List<string> denyPrefixes = default(List<string>), bool? disableIndexing = default(bool?)) { // 修复点1:初始化空列表,从根源避免null this.AllowPrefixes = allowPrefixes ?? new List<string>(); this.DenyPrefixes = denyPrefixes ?? new List<string>(); this.DisableIndexing = disableIndexing; } [DataMember(Name="allowPrefixes", EmitDefaultValue=false)] public List<string> AllowPrefixes { get; set; } [DataMember(Name="denyPrefixes", EmitDefaultValue=false)] public List<string> DenyPrefixes { get; set; } [DataMember(Name="disableIndexing", EmitDefaultValue=false)] public bool? DisableIndexing { get; set; } public override string ToString() { var sb = new StringBuilder(); sb.Append("class IndexingPolicy {\n"); // 修复点2:安全拼接列表元素,无需再处理null sb.Append(" AllowPrefixes: ").Append(string.Join(", ", AllowPrefixes)).Append("\n"); sb.Append(" DenyPrefixes: ").Append(string.Join(", ", DenyPrefixes)).Append("\n"); sb.Append(" DisableIndexing: ").Append(DisableIndexing ?? false).Append("\n"); // 可选:给可空bool设置默认显示值 sb.Append("}\n"); return sb.ToString(); } }
关键修复说明
- 构造函数初始化空列表:用
??空合并运算符,当传入的列表为null时自动创建空列表,彻底避免后续代码的null引用问题。 - ToString方法简化:因为构造函数已经保证列表不为空,所以可以直接安全调用
string.Join拼接元素,既解决了输出类型名的问题,也不会再触发异常。 - 可选优化:对于
DisableIndexing这个可空bool,用?? false给它设置默认显示值,避免输出null,你也可以根据需求调整这个默认值。
这样修改后,不管是用默认参数创建实例,还是传入null列表,都能正常输出预期内容,也不会再出现异常啦。
内容的提问来源于stack exchange,提问作者santosh kumar
相关产品推荐
相关产品推荐

