لطفا کدهاتون رو بین تگ code یا Source بنویسید (علامت # و <> در بین ابزارهای بالا!!)
فکر کنم مشکل از خط زیر باشه
j = p2.Length;
دقیقا متوجه نشدم این کد قراره چه کاری کنه! ولی چند مورد هست که به نظر مشکل داره
تغییر شمارنده حلقه توی اولین دستور از بلاک حلقه به طوری که شرط شمارنده نقض بشه چندان مرسوم نیست.
for(j = 0;j < p2.Length;j++)
{
j = p2.Length;
....
چون اندیس آرایه ها از 0 شروع میشه برای دسترسی به آخرین عنصر از آرایه باید یک واحد از طول آرایه کم کرد
j = p2.Length - 1;
اگه حلقه رو به صورت زیر تغییر بدید فکر کنم راحتتر و خوانا تر باشه
for(j = 5;j < p2.Length;j++)
{
if(!al.Contains(p2[j].Id)
p2[j].Kill();
}