我很好奇为什么C#数组为true
属性返回IsSerializable
。数组没有任何Serializable
属性,也没有实现ISerializable
接口,为什么IsSerializable
属性设置为true
?
当我尝试以下代码时,它在控制台中输出“True”:
Console.WriteLine (new string[0].GetType().IsSerializable);
输出结果为:
True
我的.NET运行时版本是3.5。
答案 0 :(得分:21)
Arrays
没有任何Serializable
属性,也没有实现ISerializable
接口
Array
类是C#数组的隐式基类,具有[SerializableAttribute]
:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, IList, ICollection,
IEnumerable, IStructuralComparable, IStructuralEquatable
似乎编译器将[SerializableAttribute]
添加到数组类型本身
foreach (var a in typeof(string[]).GetCustomAttributes(false)) {
Console.WriteLine(a); // Prints "System.SerializableAttribute"
}
将false
传递给GetCustomAttributes
可确保只返回此类的属性,而不返回其基类的属性。