Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拆分作为对象属性的字符串,从拆分的字符串创建新对象。有优雅的方式吗?_C#_.net_Linq_List_Parsing - Fatal编程技术网

C# 拆分作为对象属性的字符串,从拆分的字符串创建新对象。有优雅的方式吗?

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,如下所示:

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);
    }
}