如何在使用LINQ C#创建新对象时访问内部属性?
我有一个模型类名person如何在使用LINQ C#创建新对象时访问内部属性?,c#,properties,model,new-operator,C#,Properties,Model,New Operator,我有一个模型类名person public class person { public string Name { get; set; } public string[] cars { get; set; } public int NoOfCars { get; set; } } 我有一个明显的收集,即个人名单。现在我将初始化ObservableCollection person pItem = new person { Name = "Sakthi",
public class person
{
public string Name { get; set; }
public string[] cars { get; set; }
public int NoOfCars { get; set; }
}
我有一个明显的收集,即个人名单。现在我将初始化ObservableCollection
person pItem = new person
{
Name = "Sakthi",
cars = new string[] { "Honda City", "Maruthi Ciaz" },
NoOfCars = cars.Count()
}
ObservableCollection<person> PersonsList = new ObservableCollection<person>();
PersonsList.Add(pItem);
person pItem=新人
{
Name=“Sakthi”,
cars=新字符串[]{“Honda City”、“Maruthi Ciaz”},
NoOfCars=cars.Count()
}
ObservableCollection PersonList=新的ObservableCollection();
人员列表。添加(pItem);
在这里,我需要从cars属性中分配NoOfCars,而不需要手动将值指定为2,也不需要显式使用外部字符串[]变量。我需要使用LINQ C隐式内联解决方案。您可以将逻辑添加到属性本身:
public class Person
{
public string Name { get; set; }
public string[] Cars { get; set; }
public int NoOfCars { get { return Cars == null ? 0 : Cars.Length; } }
}
不需要提供setter
旁注:您应该遵循.NET
如果您无法修改该类,并且需要将其内联(为什么?),则无法从对象初始值设定项中访问其他属性,因为该对象尚未完全初始化。所以这是不允许的 为什么不能将数组存储在变量中
string[] myCars= { "Honda City", "Maruthi Ciaz" };
person pItem = new person
{
Name = "Sakthi",
cars = myCars,
NoOfCars = myCars.Length
}
可以将逻辑添加到属性本身:
public class Person
{
public string Name { get; set; }
public string[] Cars { get; set; }
public int NoOfCars { get { return Cars == null ? 0 : Cars.Length; } }
}
不需要提供setter
旁注:您应该遵循.NET
如果您无法修改该类,并且需要将其内联(为什么?),则无法从对象初始值设定项中访问其他属性,因为该对象尚未完全初始化。所以这是不允许的 为什么不能将数组存储在变量中
string[] myCars= { "Honda City", "Maruthi Ciaz" };
person pItem = new person
{
Name = "Sakthi",
cars = myCars,
NoOfCars = myCars.Length
}
字段初始化是全有或全无操作。要么执行所有操作,要么不执行任何操作,然而,只有当所有操作都完成时,这种包含操作的结果才可见。因此,不能在初始值设定项中使用
cars.Count()
。尤其是cars
-属性甚至不在初始值设定项的范围内,因此您无法以任何方式访问它
你必须在初始化你的人之后设置它,或者通过NoOfCars=pItem.cars.Count()
明确地设置,或者正如Tim在NoOfCars
的getter中已经提到的那样设置
编辑:如果确实要使用字段初始化,可以在前面创建数组,然后设置人员
:
var cars = new string[] { "Honda City", "Maruthi Ciaz" };
person pItem = new person
{
Name = "Sakthi",
cars = cars,
NoOfCars = cars.Count()
}
字段初始化是全有或全无操作。要么执行所有操作,要么不执行任何操作,然而,只有当所有操作都完成时,这种包含操作的结果才可见。因此,不能在初始值设定项中使用cars.Count()
。尤其是cars
-属性甚至不在初始值设定项的范围内,因此您无法以任何方式访问它
你必须在初始化你的人之后设置它,或者通过NoOfCars=pItem.cars.Count()
明确地设置,或者正如Tim在NoOfCars
的getter中已经提到的那样设置
编辑:如果确实要使用字段初始化,可以在前面创建数组,然后设置人员
:
var cars = new string[] { "Honda City", "Maruthi Ciaz" };
person pItem = new person
{
Name = "Sakthi",
cars = cars,
NoOfCars = cars.Count()
}
如果您的模型类是远程的,请尝试此选项
person pItem = new person
{
Name = "Sakthi",
cars = new string[] { "Honda City", "Maruthi Ciaz" },
NoOfCars = 0
}
在将项目添加到列表之前,计算NoOfCars的值
ObservableCollection<person> PersonsList = new ObservableCollection<person>();
pItem.NoOfCars = pItem.cars.Count();
PersonsList.Add(pItem);
ObservableCollection PersonList=新的ObservableCollection();
pItem.NoOfCars=pItem.cars.Count();
人员列表。添加(pItem);
如果您的模型类是远程的,请尝试此选项
person pItem = new person
{
Name = "Sakthi",
cars = new string[] { "Honda City", "Maruthi Ciaz" },
NoOfCars = 0
}
在将项目添加到列表之前,计算NoOfCars的值
ObservableCollection<person> PersonsList = new ObservableCollection<person>();
pItem.NoOfCars = pItem.cars.Count();
PersonsList.Add(pItem);
ObservableCollection PersonList=新的ObservableCollection();
pItem.NoOfCars=pItem.cars.Count();
人员列表。添加(pItem);
如果不能修改Person类,可以编写一个方法(否则可以给它一个合适的构造函数):
那就叫它:
PersonsList.Add(CreatePerson("Sakthi", new string[] { "Honda City", "Maruthi Ciaz" }));
如果不能修改Person类,可以编写一个方法(否则可以给它一个合适的构造函数):
那就叫它:
PersonsList.Add(CreatePerson("Sakthi", new string[] { "Honda City", "Maruthi Ciaz" }));
谢谢。但是我的模型类在远程服务器中。我无法修改它,或者无法创建派生类。请帮助我。我必须把这个任务放在一个复杂的LINQ中。这是一个单语句执行。所以,我在内联赋值中需要它,而不是使用外部变量的显式赋值。请帮助我。@B.Balamanigandan:将字符串[]
存储在匿名类型的属性中。然后,您可以使用它初始化对象,并从中派生NoOfCars
值。但是我们必须看到你真正的疑问来告诉你怎么做。非常感谢。但是我的模型类在远程服务器中。我无法修改它,或者无法创建派生类。请帮助我。我必须把这个任务放在一个复杂的LINQ中。这是一个单语句执行。所以,我在内联赋值中需要它,而不是使用外部变量的显式赋值。请帮助我。@B.Balamanigandan:将字符串[]
存储在匿名类型的属性中。然后,您可以使用它初始化对象,并从中派生NoOfCars
值。但我们必须看到您真正的查询,以向您展示如何使用“我需要使用LINQ隐式内联解决方案”为什么?除了只显示一个LINQ没有意义的对象之外,为什么还需要它内联呢?如果我使用(新字符串[]{“Honda City”,“Maruthi Ciaz”})。Count()意味着它会不自觉地消耗内存。这就是我的问题。那你为什么不能使用2
?如果字符串[]
已经是静态的,不能作为变量使用。将字符串[]
存储在匿名类型的属性中。然后,您可以使用它初始化对象,并从中派生NoOfCars
值。但我们必须看看你真正的查询,告诉你怎么做。我刚刚展示了样本集。它是一个从另一个集合查询的集合,而不是如上所述的静态赋值?除了只显示一个对象之外