【问题标题】:Workaround for Compiler Error CS0542: member names cannot be the same as their enclosing type编译器错误 CS0542 的解决方法:成员名称不能与其封闭类型相同
【发布时间】:2013-02-15 16:59:33
【问题描述】:

我有一个相当大的 VB.NET 项目,它是由一位前雇员构建的。他得到了大部分的工作,但不是全部。

我知道,它已经这样运行了 2 年。也许是 3。

现在,管理层正在推动恢复这个项目并完成从未完成的工作。

项目已分配给我,我有一个月的时间来加快进度。

我正在用 C# 重新编写它,因为我的编码在该语言中更强大。

他使用的一个好主意是构造类,以便它们模仿数据库表:

  • 表名变成类名
  • 列名变成属性名
  • 列数据类型变成属性数据类型

这是一个小例子:

Public Class Acct_Code
    Private _Acct_Code_ID As String = String.Empty
    Private _Acct_Code As String = String.Empty

    Public Property Acct_Code_ID() As String
        Get
            Return _Acct_Code_ID
        End Get
        Set(ByVal value As String)
            _Acct_Code_ID = value
        End Set
    End Property

    Public Property Acct_Code() As String
        Get
            Return _Acct_Code
        End Get
        Set(ByVal value As String)
            _Acct_Code = value
        End Set
    End Property

End Class

目前,我无法将此 VB 代码放入 C#,因为 Error CS0542 表示:

错误信息
“用户定义类型”:成员名称不能与其封闭类型相同
在同一个构造中多次使用了一个名称。此错误可能是由于无意中将返回类型放在构造函数上造成的。

我知道应该重命名类或属性;但是,我希望一次完成这个项目,而不是在这里创建根本不起作用的代码。

有谁知道解决这个编译器错误的方法 - 只是暂时的,直到我构建项目?

我知道有一些方法可以忽略警告和异常,但我不知道忽略编译器错误的方法。

【问题讨论】:

  • 旁注:请考虑删除有关某人代码质量的无关抱怨(可能是您个人决定重写生产代码,因为您不喜欢 VB.Net)......不仅是无关的质疑它表明您如何尊重他人的意见...

标签: c# visual-studio-2010 compiler-errors


【解决方案1】:

要解决编译器错误,只需将您的类拆分为基类和派生类,然后将有问题的成员移动到基类中。

class A
{
    public string B { get; set; } // <-- This compiles just right!
}

class B : A
{
}

【讨论】:

    【解决方案2】:

    您不能忽视违反语言规则的行为。您必须修改名称。

    您可能希望在移植之前尝试在 VB 中修复名称,因为这样您就可以随时拥有一个工作代码库...这将使您能够利用重构。然后当你确定所有的成员名称都与类型名称不同时,你可以移植到 C#。

    顺便说一句,当您移植该代码时,您应该利用自动实现的属性,离开:

    public class Account
    {
        public string Id { get; set; }
        public string Code { get; set; }
    }
    

    (然后尽量不要让对象以所有可能的方式发生变异......那是另一回事:)

    【讨论】:

    • 我从没想过重构 VB 代码。那也行。 (仅供参考:我已经编码了您提到的自动实现属性的优势。更简洁的代码!)
    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2012-04-21
    • 1970-01-01
    • 2020-08-24
    • 2012-05-29
    相关资源
    最近更新 更多