从类对象列表中选择时设置属性值

Posted

技术标签:

【中文标题】从类对象列表中选择时设置属性值【英文标题】:Set property value while selecting from list of class objects 【发布时间】:2021-10-17 09:07:05 【问题描述】:

我试图在从列表中选择时设置值(天值到“星期天”),如下面的方法“getData”,有没有一种方法可以在不真正改变类对象属性“天”值的情况下设置它?我只想在阅读时将其设置为“星期日”,例如将“星期日”设置为“日”。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleAppForChecking

    public class test
    
        public string firstName  get; set; 
        public string lastName  get; set; 
        public int age  get; set; 
        public string day  get; set; 
    

    public class TestMain
    
        static void Main(string[] args)
        
            var tests = new List<test>()
            
                new test  firstName = "Mike", lastName = "Toss", age = 20, day = "Monday" ,
                new test  firstName = "Peter", lastName = "Page", age = 30, day = "Tuesday" ,
                new test  firstName = "Stacy", lastName = "Page", age = 27, day = "Wednesday" 
            ;

            getData(tests);
            GetDate(tests);
        

        public static void getData(List<test> _data)
        
            var _data1 = _data.Where(w => w.firstName == "Stacy")
                              .Select(o => new 
                                            
                                             o.firstName, 
                                             o.lastName, 
                                             day = o.day = "Sunday",
                                             o.age 
                                           )
                              .ToList();
            foreach(var d in _data1)
            
                Console.WriteLine(d);
            
        

        public static void GetDate(List<test> _data1)
        
            foreach (var d in _data1)
            
                Console.WriteLine(d);
            
        
    

【问题讨论】:

我不太明白这个问题。你只想要day = "Sunday" 吗?在这种情况下,无需分配o.day,否则源对象的属性将被明确更改... @OlivierRogier-我可以将天设置为星期日,但我不希望更改实际的类对象属性“天”值。我只想选择“星期日”作为“日”。类正在多个地方使用。 @.DeSon 因此,按照我写的去做。删除o.day =。运行新代码并查看它现在是否可以工作:查询显示使用 LINQ 创建的源集合中的所有新“克隆”对象的“星期天”,而源没有更改......这就是您要问的吗? @OlivierRogier-啊!正确的。不知道我怎么弄不到。谢谢! 是的:只要做你今天所做的事情 => new MyFirstName = o.firstName, MyLastName = o.lastName, MyDay = "Sunday", MyAge = o.age ) • Linq 1 • Linq 2 • Deferred Execution of LINQ Query • LINQ (MSDocs) 【参考方案1】:
_data.Where(w => w.firstName == "Stacy")
                              .Select(o=> o.day = "Sunday"; return c;)
                              .ToList();

【讨论】:

以上是关于从类对象列表中选择时设置属性值的主要内容,如果未能解决你的问题,请参考以下文章

如何从类对象列表中构造一个 json 对象

从类加载进内存到对象创建,各部分的执行顺序

jQuery - 从类的元素中获取属性值的列表

html 从“选择”下拉列表中选择ID时,指定其他对象属性

从类对象继承属性的类对象的python dict

ES6 代理类,访问私有属性(无法从类未声明的对象中读取私有成员#hidden)