Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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#_List - Fatal编程技术网

C# 如何通过组合每个列表中的一个元素,将两个不同对象的列表组合成一个列表?

C# 如何通过组合每个列表中的一个元素,将两个不同对象的列表组合成一个列表?,c#,list,C#,List,嗨,我正在尝试结合两个不同对象的列表 [{"SaveValues":[{"id":1,"allposition":{"x":-0.015270888805389405, "y":9.267399787902832},"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}, "allscale":{"x":1.0,"y":1.0},"linepos0":{"x":0.0,"y":0.0,"z":0.0}, "linepos1":{"x":0.0,"y":0.

嗨,我正在尝试结合两个不同对象的列表

[{"SaveValues":[{"id":1,"allposition":{"x":-0.015270888805389405,
"y":9.267399787902832},"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":1}],

"NoteValues":[{"movenumber":1,"notemsg":"Added one"}]},
{"SaveValues":[{"id":1,"allposition":{"x":-0.015270888805389405,
"y":9.267399787902832},"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":2},{"id":1,
"allposition":{"x":-0.02840942144393921,"y":6.721944808959961},
"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":2}],
"NoteValues":[{"movenumber":2,"notemsg":"Added two"}]},
{"SaveValues":[{"id":1,"allposition":{"x":-0.015270888805389405,
"y":9.267399787902832},"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":3},{"id":1,
"allposition":{"x":-0.02840942144393921,"y":6.721944808959961},
"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"allscale":{"x":1.0,"y":1.0},
"linepos0":{"x":0.0,"y":0.0,"z":0.0},"linepos1":{"x":0.0,"y":0.0,"z":0.0},
"movetype":3},{"id":1,"allposition":{"x":-0.10085266828536987,
"y":4.49822473526001},"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},
"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":3}],"NoteValues":
[{"movenumber":3,"notemsg":"Added three"}]},{"SaveValues":
[{"id":1,"allposition":{"x":-0.015270888805389405,"y":9.267399787902832}
,"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},

"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":4},{"id":1,
"allposition":{"x":-0.02840942144393921,"y":6.721944808959961},
"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"allscale":{"x":1.0,"y":1.0},"linepos0":{"x":0.0,"y":0.0,"z":0.0},
"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":4},{"id":1,"allposition"
:{"x":-0.10085266828536987,"y":4.49822473526001},
"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},
"allscale":{"x":1.0,"y":1.0},
"linepos0":{"x":0.0,"y":0.0,"z":0.0},"linepos1":{"x":0.0,"y":0.0,"z":0.0},
"movetype":4},{"id":1,"allposition":{"x":0.17862117290496827,"y":1.5408382415771485},
"allrotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"allscale":{"x":1.0,"y":1.0},
"linepos0":{"x":0.0,"y":0.0,"z":0.0},"linepos1":{"x":0.0,"y":0.0,"z":0.0},"movetype":4}],
"NoteValues":[{"movenumber":4,"notemsg":"Added four"}]}]
下面给出的类

[System.Serializable]
public class PlayerHandler 
{
public int id; 
public Vector2 allposition;
public Quaternion allrotation;
public Vector2 allscale;

public Vector3 linepos0;
public Vector3 linepos1;
public int movetype;


public PlayerHandler(int ids,Vector2 allpos,Quaternion allrot,Vector2 allscal,Vector3 Line0,Vector3 Line1,int Moves)

{
    this.id = ids;
    this.allposition = allpos;
    this.allrotation = allrot;
    this.allscale = allscal;
    this.linepos0 = Line0;
    this.linepos1 = Line1;
    this.movetype = Moves;
}



}

[System.Serializable]
public class PlayerMovement
{
public int movenumber;
public string notemsg;

public PlayerMovement(int Movenum,string Note)
{
    this.movenumber = Movenum;
    this.notemsg = Note;

}

}
现在我有两个列表及其相应的值

List<PlayerHandler> SaveValuesDeserialize = new List<PlayerHandler>();
List<PlayerMovement> NoteValuesDeserialzeList = new List<PlayerMovement>();
List SaveValuesDeserialize=new List();
List NoteValuesDeserialzeList=新列表();
我想将上述两个列表合并成第三个列表,其中第0个元素来自NoteValuesDeserializeList[0],第1个元素来自SaveValuesDeserialize[0],第2个元素来自NoteValuesDeserializeList[1],第3个元素来自SaveValuesDeserialize[1],直到所有值相加

人们产生了各种疑问。新添加的列表的对象是什么


另外,添加新列表的计数是多少(两个列表的合并计数)?

由于PlayerHandler和PlayerMovement的唯一祖先是object,因此只能创建对象列表:

List<object> AllcombinedList = new List<object>();

int count = Math.Min(SaveValuesDeserialize.Count, NoteValuesDeserialzeList.Count);
// Or raise an exception if SaveValuesDeserialize.Count != NoteValuesDeserialzeList.Count
// Or ask the user what to do with the rest if it can happen
// Else use count = SaveValuesDeserialize.Count for example if always same
for ( int index = 0; index < count; index++ )
{
  AllcombinedList.Add(NoteValuesDeserialzeList[index]);
  AllcombinedList.Add(SaveValuesDeserialize[index]);
}
List AllcombinedList=new List();
int count=Math.Min(SaveValuesDeserialize.count,noteValuesDeserializeList.count);
//如果SaveValuesDeserialize.Count!=NoteValuesDeserialzeList.Count
//或者询问用户,如果可能的话,如何处理其余部分
//否则,请使用count=SaveValuesDeserialize。例如,如果始终相同,请使用count
for(int index=0;index
也许您可以使用元组列表来实现您的目标:

var AllcombinedList = new List<Tuple<PlayerHandler, PlayerMovement>>();

int count = Math.Min(SaveValuesDeserialize.Count, NoteValuesDeserialzeList.Count);
// Or raise an exception if SaveValuesDeserialize.Count != NoteValuesDeserialzeList.Count
// Or ask the user what to do with the rest if it can happen
// Else use count = SaveValuesDeserialize.Count for example if always same
for ( int index = 0; index < count; index++ )
{
  var item = new Tuple<PlayerMovement, PlayerHandler>(NoteValuesDeserialize[index],
                                                      SaveValuesDeserialzeList[index]);
  AllcombinedList.Add(item);
}
var AllcombinedList=new List();
int count=Math.Min(SaveValuesDeserialize.count,noteValuesDeserializeList.count);
//如果SaveValuesDeserialize.Count!=NoteValuesDeserialzeList.Count
//或者询问用户,如果可能的话,如何处理其余部分
//否则,请使用count=SaveValuesDeserialize。例如,如果始终相同,请使用count
for(int index=0;index
或匿名元组:

var AllcombinedList = new List<(PlayerHandler, PlayerMovement)>();

int count = Math.Min(SaveValuesDeserialize.Count, NoteValuesDeserialzeList.Count);
// Or raise an exception if SaveValuesDeserialize.Count != NoteValuesDeserialzeList.Count
// Or ask the user what to do with the rest if it can happen
// Else use count = SaveValuesDeserialize.Count for example if always same
for ( int index = 0; index < count; index++ )
{
  AllcombinedList.Add((NoteValuesDeserialize[index], SaveValuesDeserialzeList[index]));
}
var AllcombinedList=new List();
int count=Math.Min(SaveValuesDeserialize.count,noteValuesDeserializeList.count);
//如果SaveValuesDeserialize.Count!=NoteValuesDeserialzeList.Count
//或者询问用户,如果可能的话,如何处理其余部分
//否则,请使用count=SaveValuesDeserialize。例如,如果始终相同,请使用count
for(int index=0;index
或者,您可以创建一个提供键入和命名功能的类:

var AllcombinedList = new List<PlayerItem>();

int count = Math.Min(SaveValuesDeserialize.Count, NoteValuesDeserialzeList.Count);
// Or raise an exception if SaveValuesDeserialize.Count != NoteValuesDeserialzeList.Count
// Or ask the user what to do with the rest if it can happen
// Else use count = SaveValuesDeserialize.Count for example if always same
for ( int index = 0; index < count; index++ )
  AllcombinedList.Add(new PlayerItem
  {
    Movement = NoteValuesDeserialzeList[index],
    Handler = SaveValuesDeserialize[index]
  });

public class PlayerItem
{
  public PlayerMovement Movement { get; set; }
  public PlayerHandler Handler { get; set; }
}
var AllcombinedList=new List();
int count=Math.Min(SaveValuesDeserialize.count,noteValuesDeserializeList.count);
//如果SaveValuesDeserialize.Count!=NoteValuesDeserialzeList.Count
//或者询问用户,如果可能的话,如何处理其余部分
//否则,请使用count=SaveValuesDeserialize。例如,如果始终相同,请使用count
for(int index=0;index
例如,如果您想管理其他项目,您可以:

int count = Math.Max(SaveValuesDeserialize.Count, NoteValuesDeserialzeList.Count);
for ( int index = 0; index < count; index++ )
{
  var movement = index < NoteValuesDeserialzeList.Count 
               ? NoteValuesDeserialzeList[index] 
               : null;
  var handler = index < SaveValuesDeserialize.Count 
              ? SaveValuesDeserialize[index] 
              : null;
  AllcombinedList.Add(new PlayerItem
  {
    Movement = movement,
    Handler = handler
  });
}
int count=Math.Max(SaveValuesDeserialize.count,noteValuesDeserializeList.count);
for(int index=0;index
您必须自行决定如何处理附加项(当一个计数大于另一个计数时):不执行任何操作,将另一个添加为null或创建默认实例。

通用
列表在其定义中仅接受一种类型
T
。因此,其中不能有不同类型的元素,所有元素都必须是相同类型的

您可以使用
结构
来保存和公开这两种数据类型,然后将此类或结构用作泛型
列表
定义中的类型
T
。或者,您可以使用


如果你觉得这个方法太复杂,然后你可以使用
T
作为你的
列表的类型
PlayerHandler
PlayerMovement
的祖先,这是
Object

将问题标记为重复的可能重复忽略了问题的核心。我想知道你真正想做的是为什么这不,正如人们所说,一个列表中不能有不同的类型,但你可以用其他方法存储这些数据,但这取决于你想做什么。我想把所有数据都放在一个列表中,这样我就可以在“下一步”和“上一步”按钮中使用它。我需要使用计数器++和计数器-,才能使用它。否则,这将非常困难。装箱和取消装箱仅在值类型中发生,并且值类型(int)被包装在对象引用中并移动到堆中。上述类型是类,即已在堆上创建的引用类型,因此没有装箱,您只有一个对PlayerHandler和PlayerMovement对象的对象引用列表。我尝试了解决方案的最后一个代码。SaveValuesDeserialize计数为10,noteValuesDeserializeList计数为4。因此它只需要最小计数。那么它将如何从
添加所有SaveValuesDeserialize的值(int index=0;index