نگارش ابتدایی «iTextSharp.LGPLv2.Core » بر اساس کدهای اولیهی iTextSharp بود که مستقیما از جاوا به سیشارپ ترجمه شده بود. این کدها پر بودند از ساختارهای دادهای مانند Hashtable و ArrayList که مرتبط هستند با روزهای آغازین ارائهی دات نت 1؛ پیش از ارائهی Generics. برای مثال نوع Hashtable، همانند ساختار دادهی Dictionary عمل میکند، اما جنریک نیست؛ یعنی شبیه به <Dictionary<object, object عمل میکند و برای کار با آن، باید مدام از تبدیل نوعهای دادهها (یا همان boxing) از نوع object، به نوع دادهی مدنظر، استفاده کرد که این تبدیل نوعها، همیشه به همراه کاهش کارآیی هم هستند. به علاوه در حین کار با Hashtable، اگر کلیدی در مجموعهی آن وجود نداشته باشد، فقط نال را بازگشت میدهد، اما Dictionary، یک استثنای یافت نشدن کلید را صادر میکند. بنابراین فرض کنید که با هزاران سطر کد استفاده کنندهی از Hashtable طرف هستید که اگر آنها را تبدیل به Dictionaryهای جنریک متناسبی کنید تا کارآیی برنامه بهبود یابد، تمام موارد استفادهی از آنهارا نیز باید به همراه TryGetValueها کنید تا از شر استثنای یافت نشدن کلید درخواستی، در امان باشید. در این مطلب روش مواجه شدن با یک چنین حالتی را با حداقل تغییر در کدها بررسی خواهیم کرد. ممنوع کردن استفادهی از ساختارهای دادهی غیرجنریک قدم اول مواجه شدن با یک چنین کدهای قدیمی، ممنوع کردن استفادهی از ساختارهای دادهی غیرجنریک و الزام به تبدیل آنها به نوعهای جدید است. برای این منظور میتوان از Microsoft.CodeAnalysis.BannedApiAnalyzers استفاده کرد که توضیحات بیشتر آنرا در مطلب «غنی سازی کامپایلر C# 9.0 با افزونهها» پیشتر بررسی کردهایم. به صورت, ...ادامه مطلب