'System.Collections.Generic.List<GTA.Vector2>' does not contain a definition for 'Item' and no extension method

StackOverflow https://stackoverflow.com/questions/21439205

  •  04-10-2022
  •  | 
  •  

Pregunta

Need help with C#,problem is that I am porting code from VB.NET to C# I port by myself and then check into translators but my problem is that 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?) and problem of code is

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

also there is where I create bones

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

And where I create list static List<TSkeleton> skeletonList = new List<TSkeleton>(); Searched for solution but unsuccessful. Also there is dll called for creating this script named ScriptHookDotNet

Thanks For help. Regards, Paul.

¿Fue útil?

Solución 2

You just need to remove .Item on every list access. That meass s.bonePos2D.Item[16].X becomes s.bonePos2D[16].X.

This is because C# understands how to use indexers correctly. List<T>.Item is actually an indexer, which can be seen in the docs, as it's defined as: public T this[int index] { get; set; } on MSDN.

Otros consejos

Try this...

s.bonePos2D[1] //2nd bonePos2D item
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top