是否可以检测以下情况(使用编译器警告或使用外部工具):
public class SomeItem
{
public string ValueOne { get; set; }
public string ValueTwo { get; set; }
}
[DataContract]
public class Response
{
[DataMember]
public List<SomeItem> Items { get; set; } //A desirable warning: SomeItem is NOT a DataContract, SomeItem has no member with the DataMember attribute.
}
问题是这段代码可以在没有错误或警告的情况下编译,但它不能正常工作:项目将始终为空。
你是对的,构建没有检测到这些问题。为什么?因为它会极大地影响构建性能。
可以采用哪些方法?我可以看到两个:
静态分析。我所说的“静态”是指使用反射检查程序集而不重新构建它们。可以针对对象图的根执行分析。收集所有类型和成员,在每个类型中创建与其他类型的使用相关的关联,然后找出数据契约中包含的所有成员。然后寻找可能存在的不一致之处,如您所显示的那样。这是一个完全可以解决的问题,但是对于单个问题来说代码太大了。如果您对某些特定的不一致有疑问,我很可能可以回答并构建一个代码示例来检测它们,但我不会花那么多时间来创建整个实用程序。