【问题标题】:Setting the default `String` value of an object in C#在 C# 中设置对象的默认 `String` 值
【发布时间】:2014-08-16 00:56:33
【问题描述】:

我对 C# 比较陌生,所以默认值的概念让我有些困惑。

我目前有一个包含两个 String 值的对象,serialNumberfullPath。它是一个简单的对象,只包含这两个字符串和各自的 getter 方法(在创建对象后它们不会被更改;因此没有 setter 方法)。

我想将这些对象的列表放入CheckedListBox。我希望该框仅显示序列号而不是完整路径。 According to MSDNCheckedListBox 使用对象的默认 String 值。创建对象时如何将其设置为serialNumber?同样,它不应该事后改变。另外,我不是getset 关键字的忠实粉丝(我来自Java 背景),所以如果可能的话,我想像我一样使用更传统的getter/setter出于代码可读性的目的,在下面完成。

class ModuleData
{

  private String serialNumber;
  private String fullPath;


  public ModuleData(String serialNumber, String fullPath)
  {
     this.serialNumber = serialNumber;
     this.fullPath = fullPath;
  }

  public String getSerialNumber()
  {
     return serialNumber;
  }

  public String getFullPath()
  {
     return fullPath;
  }

  public String toString()
  {
     return serialNumber;
  }

  public String DefaultValue
  {
     return serialNumber;
  }

}

【问题讨论】:

  • 是ToString(),大写T
  • 从长远来看,使用不同语言的约定会导致痛苦。不要用 C# 编写 Java。它们是两种不同的语言。
  • @Steve Perfect,它就像一个魅力,非常感谢。请将您的评论作为答案,以便我给予您适当的信任。
  • @audiFanatic 不应该“像魅力一样工作” - 它缺少一个非常重要的部分:override
  • 这是一个有效的问题,文档指的是“默认字符串”,没有解释它是什么。

标签: c# .net default-value getter


【解决方案1】:

stringString 的默认值default(string)null,但这不是文档所指的内容。它指的是对象的ToString() 值,which you can override

尝试这样的事情,使用 real C# 约定(看看它的可读性如何!),还要注意override keyword

public class ModuleData
{
    public ModuleData(string serialNumber, string fullPath)
    {
        SerialNumber = serialNumber;
        FullPath = fullPath;
    }

    public string SerialNumber { get; private set; }

    public string FullPath { get; private set; }

    public override string ToString()
    {
        return SerialNumber;
    }
}

【讨论】:

  • 是的,使用 override 关键字很好。 VS在我忘记的时候对我大喊大叫
【解决方案2】:

要获取类实例的字符串表示形式,您需要重写返回所需值的 ToString 方法。在您的代码中,您编写 toString()(小写 T),因此 C# 区分大小写,它不是正确的覆盖。

改成

 public override string ToString()
 {
     return serialNumber;
 }

【讨论】:

  • 不得不选择 khillang,因为他首先包含了 override 关键字,希望您不要对此感到生气。
猜你喜欢
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2016-06-24
  • 2021-06-07
  • 1970-01-01
  • 2022-01-21
  • 2016-01-19
  • 2011-10-27
相关资源
最近更新 更多