【问题标题】:Object returned by LINQ cannot assigned with object with same classLINQ 返回的对象不能分配给具有相同类的对象
【发布时间】:2017-09-28 17:23:07
【问题描述】:

我正在尝试将 Linq 返回的对象分配给具有相同类的新对象,例如:

object x = (object) y

实际代码示例:

public void update(Person person){
    //Persons is observable collection
    Person found = Persons.FirstOrDefault(x => x.Id == person.Id);
    found = person; //Persons not changing
}


Person newPerson = new Person(1, "Andy");
update(newPerson);

我尝试过克隆:

public void update(Person person){
    //Persons is observable collection
    Person found = Persons.FirstOrDefault(x => x.Id == person.Id);
    found = person.Clone(); // CLONING but Persons STILL NOT changing
}


Person newPerson = new Person(1, "Andy");
update(newPerson);

Persons observablecollection 变量保持不变。我看不出代码有什么问题,有什么建议吗?

编辑:抱歉之前的语法错误。

【问题讨论】:

  • function 关键字有什么用?发布您的实际工作代码。
  • 您是否要替换 ObservableCollection 中的对象?
  • 恐怕你错过了一些基本的c#知识。您只需将person 引用 分配给您的局部变量 found。这不会改变您之前在 Persons 集合中找到的 instance
  • 抱歉大家的错字。 @RenéVogt,当然,但是 found.Name = person.Name 是如何工作的?
  • @tonywei 是的,这会改变您在收藏中找到的实例的 Name 属性。

标签: c# wpf linq oop


【解决方案1】:

如果您尝试将ObservableCollection<Person> 中的Person 对象替换为另一个对象,请尝试以下操作:

Person found = Persons.FirstOrDefault(x => x.Id == person.Id);
if(found != null)
{
    int index = Persons.IndexOf(found);
    Persons[index] = person;
}

【讨论】:

    【解决方案2】:

    Persons observablecollection 变量保持不变。

    嗯,是的,呃。您不会更改其引用或更新其中的值。

    Person found = Persons.FirstOrDefault(x => x.Id == person.Id);
    found = person; //not changing
    

    您正在将found 的引用设置为 person 的引用。所以person 不会改变。

    假设我做了这样的事情:

    void ModifyString(string input)
    {
        string newValue = Database.GetNewValue();
        newValue = input;
    }
    

    无论我传入什么,input 都不会改变,无论是 inside 方法还是 outside 方法(用作参数的实例)。 p>

    你确定你的作业没有倒退吗?

    【讨论】:

    • 是的,我知道“person”不会改变,但我希望“Persons”结尾带有“s”字母。
    • 那么您应该将 Persons[x] 更改为另一个 Person 对象。例如,请参阅我的答案。
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多