当前位置:  开发笔记 > Android > 正文

为什么这个属性没有设置?

如何解决《为什么这个属性没有设置?》经验,为你挑选了1个好方法。

在我投射之后,我无法设置属性的值.我不确定这是否被称为拳击.

无论如何,新的变量正在设置,但原始的不是.我认为新变量只是对原始变量的引用.但是当我检查intellisence/debug观察器时,原始属性仍为null.

这是代码.

// NOTE: data is either a Foo || FooFoo || FooBar, at this point.
//       only Foo impliments ITagElement.
if (data is ITagElement)
{
    var tags = ((ITagElement)data).TagList;
    // At this point, tags == null and data.TagList == null.
    if (tags.IsNullOrEmpty())
    {
        tags = new List();
    }

    tags.Add(new Tag
    {
        K = xmlReader.GetAttribute("k"),
         V = xmlReader.GetAttribute("v")
    });

    // At this point, Tags.Count == 1 and data.TagList == null :( :( :(
}

请注意有关该值我行内注释tagsdata.TagList?有人可以解释一下我做错了什么吗?我认为变量tags只是属性的引用指针data.TagList..但它看起来不是.

更新/回答:)

谢谢你们的答案!这是令人尴尬的原因我多年来一直在做这些事情,但仍然忘记/没有注意到这样的简单事情.(当然,现在让我看到了光明).

Marc得到了积分,因为他的答案(IMO)对我的单个金发脑细胞来说是最简单的.

谢谢大家!



1> Marc Gravell..:

标签和数据是完全孤立的变量.仅仅因为你指定了一个对象tags,这对变量 没有任何影响data.

您感到困惑的是,当两个变量指向同一个对象时,将通过任一变量看到对(单个)对象的更改.

基本上,如果data启动非null,则有

数据:指向"列表A"

标签:指向"列表A"

在这种情况下,将对象添加到任一对象datatags实际上是将对象添加到相同的"列表A"

但是,如果data启动为null,则您具有:

data:指向null

tags:指向null

然后你分配tags,给予:

data:指向null

标签:指向"列表B"

您必须手动分配"列表B" data才能使其坚持下去.

但是,有一种方法可以使它(分配接口/对象)工作:ref和泛型:

using System.Collections.Generic;
using System;
class Foo : IBar
{
    List list = new List();
    public int Count { get { return list.Count; } }

    void IBar.Add(string s) { list.Add(s); }
}
interface IBar
{
    void Add(string s);
}

static class Program
{
    static void Main()
    {
        Foo foo = null; // note  foo starts as null
        CreateAndAdd(ref foo, "abc");
        Console.WriteLine(foo.Count); // prove non-null and added
    }
    static void CreateAndAdd(ref T data, string s) where T : IBar, new()
    {
        if (data == null) { data = new T(); } // create
        data.Add(s); // mutate
    }
}

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有