【问题标题】:How to add value in a public property of List<string> type in c#?如何在 C# 中的 List<string> 类型的公共属性中添加值?
【发布时间】:2009-03-06 21:49:30
【问题描述】:
private List<string> _Baseline = new List<string>();

public List<string> Baseline 
{
    get { return _Baseline; }
    set { _Baseline = value; }
}

如何设置此属性? 它不允许我使用 add 方法添加;它会引发“对象引用空”错误。

【问题讨论】:

  • 您需要展示更多代码 - 最好是一个简短但完整的程序来展示问题。
  • 同意,尽管几乎可以肯定,这正是 diegojancic 的回答
  • 你能说明这是怎么调用的吗?

标签: c# list collections


【解决方案1】:

如果您按照您在此处写的内容进行操作,它应该可以工作。 我猜你正在使用泛型,我在你的帖子中看不到它们。

如果您有一个复杂的表达式,请将其拆分。例如,将 ObjectA.Prop.Other.Xyz.Add(..) 更改为:

SomeClass a = ObjectA.Prop;
SomeClass2 b = a.Other;
SomeClass3 c = b.Xyz;
c.Add(...)

这样你会很快找到空引用的位置。

【讨论】:

    【解决方案2】:

    在使用之前你是否初始化了持有这个属性的类(使用new)?

    有两种可能的情况(假设您的代码在MyClass 类中):

    //External code:
    MyClass x = new MyClass();
    x.Baseline = null; // Somewhere it'll be set to null.
    x.Baseline.Add("Something"); // NullReferenceException
    

    或者:

    //External code:
    MyClass x = null; // Somewhere the class itself is set to null.
    x.Baseline.Add("Something"); // NullReferenceException
    

    【讨论】:

    • 否则他将无法调用它(编译时...),并且示例已经显示它已在支持变量中初始化
    • 这当然可以编译:MyClass x = null; x.Baseline.Add("空引用异常");
    【解决方案3】:

    有3种可能:

    1. 您的list&lt;string&gt; 为空
    2. 包含您的list&lt;string&gt; 的对象为空
    3. 您插入的项目为空

    当您为它分配一个新列表时,它会被寻址

    2 和 3 我们无法从您在此处发布的代码中确定。

    如果你不打算允许在你的类之外分配一个新的列表对象,那么你不需要一个 setter,正如在别处提到的那样。您可以删除它或将其声明为私有或受保护,就像这样......

    public List<string> Baseline 
    {
        get { return _Baseline; }
        protected set { _Baseline = value; }
    }
    

    【讨论】:

    • 3 不会导致异常。
    • @Chris:配置器是对的。您可以在列表中插入空值。
    • 是的,我知道,但他的异常可能是由于试图调用他插入到集合中的空对象引起的,因此是可能的。只是列出他的选择。
    • 谢谢大家,我的错误,我的代码工作正常并且和以前一样。我在处理 80 多个属性时感到困惑。
    【解决方案4】:

    由于声明不正确,我得到了同样的错误:

    private List<string> _Baseline;    - incorrect
    private List<string> _Baseline = new List<string>();    - correct
    

    【讨论】:

      【解决方案5】:

      您可能需要使用 IList:

      private IList<string> _Baseline = new List<string>();
      
      public IList<string> Baseline 
      {
          get { return _Baseline; }
          set { _Baseline = value; }
      }
      

      【讨论】:

      • 不,这应该不是问题。
      • 没有区别,都是一样的。两种方式都有效。
      • 这些天用*来强调是怎么回事,我一点也不喜欢。
      • 我不太确定 THIS 是否比 thisthis. 更好。这是一种以纯文本形式显示 emPHASis 的方法。不幸的是,英语并没有提供我们需要做的其他事情。
      • 感谢历史课,但我仍然可以不用当时流行的任何强调符号。
      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 2010-12-30
      • 1970-01-01
      • 2014-12-04
      • 2023-01-04
      • 2011-08-07
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多