2014-01-29 2 views
0

Нужна помощь с C#, проблема в том, что я портирую код с VB.NET на порт C# I сам, а затем проверить в переводчик, но моя проблема заключается в том, что Error 14 'System.Collections.Generic.List<GTA.Vector2>' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.Collections.Generic.List<GTA.Vector2>' could be found (are you missing a using directive or an assembly reference?) и проблема коды'System.Collections.Generic.List <GTA.Vector2>' не содержит определения для «Item» и никакого метода расширения

private void GraphicsEventHandler(object sender, GTA.GraphicsEventArgs e) 
{ 
    foreach (TSkeleton s in skeletonList) 
    { 
     if (s.bonePos2D.Count > 0) 
     { 
      //e.Graphics.DrawLine(s.bonePos2D.Item(0).X, s.bonePos2D.Item(0).Y, s.bonePos2D.Item(1).X, s.bonePos2D.Item(1).Y, 2, Color.White) 
      e.Graphics.DrawLine(s.bonePos2D.Item[1].X, s.bonePos2D.Item[1].Y, s.bonePos2D.Item[2].X, s.bonePos2D.Item[2].Y, s.sizeMulti, Color.Red); 
      e.Graphics.DrawLine(s.bonePos2D.Item[1].X, s.bonePos2D.Item[1].Y, s.bonePos2D.Item[3].X, s.bonePos2D.Item[3].Y, s.sizeMulti, Color.Red); 
      e.Graphics.DrawLine(s.bonePos2D.Item[2].X, s.bonePos2D.Item[2].Y, s.bonePos2D.Item[4].X, s.bonePos2D.Item[4].Y, s.sizeMulti, Color.Blue); 
      e.Graphics.DrawLine(s.bonePos2D.Item[3].X, s.bonePos2D.Item[3].Y, s.bonePos2D.Item[5].X, s.bonePos2D.Item[5].Y, s.sizeMulti, Color.Blue); 
      e.Graphics.DrawLine(s.bonePos2D.Item[4].X, s.bonePos2D.Item[4].Y, s.bonePos2D.Item[6].X, s.bonePos2D.Item[6].Y, s.sizeMulti, Color.Yellow); 
      e.Graphics.DrawLine(s.bonePos2D.Item[5].X, s.bonePos2D.Item[5].Y, s.bonePos2D.Item[7].X, s.bonePos2D.Item[7].Y, s.sizeMulti, Color.Yellow); 
      e.Graphics.DrawLine(s.bonePos2D.Item[6].X, s.bonePos2D.Item[6].Y, s.bonePos2D.Item[8].X, s.bonePos2D.Item[8].Y, s.sizeMulti, Color.Orange); 
      e.Graphics.DrawLine(s.bonePos2D.Item[7].X, s.bonePos2D.Item[7].Y, s.bonePos2D.Item[9].X, s.bonePos2D.Item[9].Y, s.sizeMulti, Color.Orange); 
      e.Graphics.DrawLine(s.bonePos2D.Item[1].X, s.bonePos2D.Item[1].Y, s.bonePos2D.Item[10].X, s.bonePos2D.Item[10].Y, s.sizeMulti, Color.Aqua); 
      e.Graphics.DrawLine(s.bonePos2D.Item[10].X, s.bonePos2D.Item[10].Y, s.bonePos2D.Item[11].X, s.bonePos2D.Item[11].Y, s.sizeMulti, Color.Aquamarine); 
      e.Graphics.DrawLine(s.bonePos2D.Item[10].X, s.bonePos2D.Item[10].Y, s.bonePos2D.Item[12].X, s.bonePos2D.Item[12].Y, s.sizeMulti, Color.Aquamarine); 
      e.Graphics.DrawLine(s.bonePos2D.Item[11].X, s.bonePos2D.Item[11].Y, s.bonePos2D.Item[13].X, s.bonePos2D.Item[13].Y, s.sizeMulti, Color.BlueViolet); 
      e.Graphics.DrawLine(s.bonePos2D.Item[12].X, s.bonePos2D.Item[12].Y, s.bonePos2D.Item[14].X, s.bonePos2D.Item[14].Y, s.sizeMulti, Color.BlueViolet); 
      e.Graphics.DrawLine(s.bonePos2D.Item[13].X, s.bonePos2D.Item[13].Y, s.bonePos2D.Item[15].X, s.bonePos2D.Item[15].Y, s.sizeMulti, Color.CadetBlue); 
      e.Graphics.DrawLine(s.bonePos2D.Item[14].X, s.bonePos2D.Item[14].Y, s.bonePos2D.Item[16].X, s.bonePos2D.Item[16].Y, s.sizeMulti, Color.CadetBlue); 
      e.Graphics.DrawLine(s.bonePos2D.Item[15].X, s.bonePos2D.Item[15].Y, s.bonePos2D.Item[17].X, s.bonePos2D.Item[17].Y, s.sizeMulti, Color.GreenYellow); 
      e.Graphics.DrawLine(s.bonePos2D.Item[16].X, s.bonePos2D.Item[16].Y, s.bonePos2D.Item[18].X, s.bonePos2D.Item[18].Y, s.sizeMulti, Color.GreenYellow); 

      for (Int16 c = 0; c <= 19; c++) 
      { 
       e.Graphics.DrawRectangle(s.bonePos2D.Item(c).X, s.bonePos2D.Item(c).Y, s.sizeMulti * 2, s.sizeMulti * 2, Color.White); 
      } 

      e.Graphics.DrawLine(s.bonePos2D.Item[0].X, s.bonePos2D.Item[0].Y, s.bonePos2D.Item[19].X, s.bonePos2D.Item[19].Y, s.sizeMulti * 4, Color.Red); 

также есть, где я создаю кости

foreach (TSkeleton s in skeletonList) 
    { 
     s.bonePos2D.Clear(); 

     if (!s.p.isOnScreen) 
      continue; 

     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Head))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Neck))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftArmRoll))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightArmRoll))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftForearmTwist))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightForearmTwist))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftHand))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightHand))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftFinger1))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightFinger1))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Spine))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftThigh))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightThigh))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftCalfRoll))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightCalfRoll))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftFoot))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightFoot))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftToe))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightToe))); 
     s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Head) + Vector3.WorldUp * 0.15f)); 
    } 
} 

а где я создаю лист static List<TSkeleton> skeletonList = new List<TSkeleton>(); Обжарьте хед для решения, но безуспешно. Также есть dll для создания этого сценария с именем ScriptHookDotNet

Спасибо за помощь. С уважением, Пол.

ответ

1

Вам просто нужно удалить .Item при каждом доступе к списку. Это meass s.bonePos2D.Item[16].X становится s.bonePos2D[16].X.

Это потому, что C# понимает, как правильно использовать indexers. List<T>.Item на самом деле является индексом, который можно увидеть в документах, так как он определен как: public T this[int index] { get; set; }on MSDN.

2

Попробуйте это ...

s.bonePos2D[1] //2nd bonePos2D item 
Смежные вопросы