C# 拆分作为对象属性的字符串,从拆分的字符串创建新对象。有优雅的方式吗?
我的设想: 我有一个对象,我们称之为object1,如下所示:C# 拆分作为对象属性的字符串,从拆分的字符串创建新对象。有优雅的方式吗?,c#,.net,linq,list,parsing,C#,.net,Linq,List,Parsing,我的设想: 我有一个对象,我们称之为object1,如下所示: object1{ string commaSeparatedListOfIds; DateTime time; int passes; ... irrelvant properties ... } 我想做的是为每个id值拆分commaSeparatedListOfIds,并将每个id与相关的其他属性一起保存在它自己的对象(object2)中 object2{ int id; DateTime time; int passes; }
object1{
string commaSeparatedListOfIds;
DateTime time;
int passes;
...
irrelvant properties
...
}
我想做的是为每个id值拆分commaSeparatedListOfIds
,并将每个id与相关的其他属性一起保存在它自己的对象(object2)中
object2{
int id;
DateTime time;
int passes;
}
这重复了信息,但对于我想要编写的方法,任何其他解决方案都会非常混乱
我尝试的是:
List<object2> newObjects = new List<object2>(object1.commaSeparatedListOfIds.Split(',').Select(
new object2{
id int.Parse,
time = object1.time
passes = object1.passes
}).ToList<object2>());
List newObjects=newlist(object1.commaSeparatedListOfIds.Split(',')。选择(
新对象2{
id int.Parse,
time=object1.time
passs=object1.passs
}).ToList());
但这不会建立
有谁能帮我尽可能优雅地做我想做的事吗?我意识到使用两个循环和一些可怕的代码是可能的,但我知道在某个地方有一个好看的解决方案!:) 我相信你想要的是:
List<object2> newObjects = object1.commaSeparatedListOfIds.Split(',')
.Select(str =>
new object2
{
id = int.Parse(str),
time = object1.time,
passes = object1.passes
})
.ToList();
List newObjects=object1.commaSeparatedListOfIds.Split(“,”)
.选择(str=>
新对象2
{
id=int.Parse(str),
time=object1.time,
passs=object1.passs
})
.ToList();
我相信您想要的是:
List<object2> newObjects = object1.commaSeparatedListOfIds.Split(',')
.Select(str =>
new object2
{
id = int.Parse(str),
time = object1.time,
passes = object1.passes
})
.ToList();
List newObjects=object1.commaSeparatedListOfIds.Split(“,”)
.选择(str=>
新对象2
{
id=int.Parse(str),
time=object1.time,
passs=object1.passs
})
.ToList();
在查询语法中(我更喜欢使用SelectMany
):
var newObjects=来自object1中的ob1
来自ob1.commaSeparatedListOfIds.Split(',')中的strId
选择新对象2(){
id=int.Parse(strId),
time=ob1.time,
passs=ob1.passs
};
列表结果=newObjects.ToList();
(错误地假设object1
是查询语法中的IEnumerable
)(我更喜欢使用SelectMany
):
var newObjects=来自object1中的ob1
来自ob1.commaSeparatedListOfIds.Split(',')中的strId
选择新对象2(){
id=int.Parse(strId),
time=ob1.time,
passs=ob1.passs
};
列表结果=newObjects.ToList();
(错误地假设object1
是一个IEnumerable
)
差不多吧。不过,请注意不要只执行int.Parse(…)
,因为您的Id字符串中可能有无效数据
差不多吧。不过,请注意不要只执行
int.Parse(…)
,因为您的Id字符串中可能有无效数据。为什么不使用foreach循环?它很容易阅读(object1.commaSeparatedListofIds.Split(','){newObjects.Add(token,…)}中的foreach字符串标记为什么不使用foreach循环?它很容易阅读(object1.commaSeparatedListofIds.Split(','){newObjects.Add(token,…)}中的foreach字符串标记)
public class O1
{
public string Ids { get; set; }
public DateTime Time { get; set; }
public int Passes { get; set; }
}
public class O2
{
public int Id { get; set; }
public DateTime Time { get; set; }
public int Passes { get; set; }
}
static void Main(string[] args)
{
var o1 = new O1();
o1.Ids = "1,2,3,4,5";
o1.Time = DateTime.Now;
o1.Passes = 42;
var results = o1.Ids.Split(',').Select(r => new O2 { Id = int.Parse(r), Time = o1.Time, Passes = o1.Passes });
foreach (var item in results)
{
Console.WriteLine("{0}: {1} {2}", item.Id, item.Time, item.Passes);
}
}