使用空属性设置器时引发 Visual Studio 警告

Posted

技术标签:

【中文标题】使用空属性设置器时引发 Visual Studio 警告【英文标题】:Raise a Visual Studio warning when using an empty property setter 【发布时间】:2011-09-02 11:01:32 【问题描述】:

我需要创建一个可序列化的类。 在这个类中,我有一个 MyGuid 只读属性,我想要可序列化但不能反序列化(属性在支持字段中初始化)。 您知道,使用基本序列化 .NET 功能,具有 reandonly 属性会使反序列化失败,因为它无法反序列化 readonly 属性。 所以我决定创建一个带有支持字段的公共 get-set MyGuid 属性,并且让 setter 什么都不做:

[Serializable]
public class Task : ITask

    private readonly Guid m_guid = Guid.NewGuid();
    public MyGuid Guid
    
        get  return m_guid; 
        set  /*Empty setter!*/ 
    

现在我不想在我的脚上开枪...... 有一种方法可以将 MyGuid 属性的设置器设置为“可弃用”或“禁用”? 如果我尝试使用 setter,最好让 Visual Studio 警告我。

或者,有更好的方法来管理这种需求?

谢谢!

编辑:在这里找到了一些东西:Serializing private member data我正在阅读...

【问题讨论】:

如果你不打算反序列化它,为什么要序列化它?您可以在属性上使用[NonSerialized]System.Xml.Serialization.XmlIgnore] 属性吗? 【参考方案1】:
public Guid Guid

    get  return m_guid; 
    set  if (value != null) Debugger.Log(0, "Warning", "This property has an empty setter, just for serializing purpose!"); 

如果您不小心自己设置了值,您将在调试窗口中收到警告。另一方面,您绝对需要序列化器的设置器,否则反序列化器将永远无法在从文件中读取该属性后为其指定一个值!所以 setter 不适合你,而是让序列化器正常运行。

【讨论】:

嗯,不错的解决方案!确切的代码是这样的: if (value != null) Debugger.Log(0, "Warning", "This property has a empty setter, just for serializing purpose!"); 在 VS2010 中我必须在哪里查找 Debugger 消息? 按照菜单:View > Output > Show output from > Debugger。一旦您开始调试应用程序(按 F5),它也会自动显示在本地窗口旁边。 好的,谢谢。但它不是太明显,那里......我会继续寻找更强大的解决方案,我真的很在乎我的脚! :-) 不客气。如果您真的需要强信号,请使用Debugger.Break(); :)【参考方案2】:

如果你不包含设置,它会自动知道它的只读,所以不会让你设置它。然后,当您尝试时,它会在您的代码中标记错误

【讨论】:

他的意思是您必须包含该集合才能使序列化工作。他只是希望它被标记为他(或其他任何人)试图使用代码中设置的属性。 如果我不包含该集合,我的类将无法序列化... :-)

以上是关于使用空属性设置器时引发 Visual Studio 警告的主要内容,如果未能解决你的问题,请参考以下文章

自定义可搜索微调器在单击微调器时引发空指针异常

Visual Studio 搞乱了项目设置

您可以在单元测试项目中使用 Visual Studio 数据库项目来为功能测试设置一个空数据库吗?

Visual Studio Community 2015 MFC 空项目无法编译

Visual Studio 2010 编译器选项

使用Visual Studio 2015生成的Word加载项会引发异常