چک می کند که آیا یک شئ با یک نوع داده شده سازگار است یا نه. برای مثال، کد زیر می تواند تعیین کند که آیا یک شئ، یک نمونه از نوع MyObject است، یا یک نوع است که از MyObject مشتق شده:
if (obj is MyObject) { }
- یک عبارت is اگر عبارت تعیین شده برایش غیر-تهی باشد، و شئ تعیین شده بتواند به نوع تعیین شده، بدون اتفاق افتادن هرگونه خطا،قالب ریزی شود، بصورت true ارزیابی می شود.
- کلمه کلیدی is باعث هشدار زمان-کامپایل می شود، اگر عبارت داده شده به آن همیشه بصورت true یا همیشه بصورت false ارزیابی شود، اما معمولا" سازگاری نوع در هنگام اجرا ارزیابی می شود.
- عملگر is نمی تواند overload یا بازتعریف شود.
- به یاد داشته باشید که عملگر is فقط به تبدیلات ارجاع ، تبدیلات جعبه بندی یا boxing و unboxing رسیدگی می کند. تبدیلات دیگر، از جمله تبدیلات کاربر-تعریف توسط این عملگر رسیدگی نمی شوند.
- متدهای بی نام اجازه ندارند در سمت چپ عملگر is قرار گیرند. این استثناء شامل عبارات لامبدا نیز می شود.
مثال:
class Class1 {} class Class2 {} class Class3 : Class2 { } class IsTest { static void Test(object o) { Class1 a; Class2 b; if (o is Class1) { Console.WriteLine("o is Class1"); a = (Class1)o; // Do something with "a." } else if (o is Class2) { Console.WriteLine("o is Class2"); b = (Class2)o; // Do something with "b." } else { Console.WriteLine("o is neither Class1 nor Class2."); } } static void Main() { Class1 c1 = new Class1(); Class2 c2 = new Class2(); Class3 c3 = new Class3(); Test(c1); Test(c2); Test(c3); Test("a string"); } } /* Output: o is Class1 o is Class2 o is Class2 o is neither Class1 nor Class2. */