biz Ancak C# 6 ile kullanılan ne bir fark yoktur, her şey ilginç hale gelir.
Örneğin bu al:
Test(1);
public void Test(object o)
{
if (o is 1) Console.WriteLine("a");
else Console.WriteLine("b");
}
Test verimleri a
. Eğer bunu o == (object)1
ile karşılaştırırsanız, normal olarak ne yazacağınızı bir fark yaratır. is
, karşılaştırmanın diğer sitesinde bulunan türü dikkate alır. Bu süper!
Ben
== null
vs
is null
sabit desen, 'kazara' çok tanıdık bir şey olduğunu düşünüyorum nerede
is
operatörün sözdizimi ve eşittir operatörü verimi aynı sonucu.
svick gibi
, is null
calls System.Object::Equals(object, object)
where ==
calls ceq
yorumladı. is
için
IL:
IL_0000: ldarg.1 // Load argument 1 onto the stack
IL_0001: ldnull // Push a null reference on the stack
IL_0002: call bool [mscorlib]System.Object::Equals(object, object) // Call method indicated on the stack with arguments
IL_0007: ret // Return from method, possibly with a value
IL ==
için:
IL_0000: ldarg.1 // Load argument 1 onto the stack
IL_0001: ldnull // Push a null reference on the stack
IL_0002: ceq // Push 1 (of type int32) if value1 equals value2, else push 0
IL_0004: ret // Return from method, possibly with a value
yaklaşık null
konuştuğumuzdan beri, bu only makes a difference on instances beri hiçbir fark yoktur.
Sadece baktığım bağlantı budur, ancak size çok fazla bilgi vermez, bu yüzden OP'nin soruyu sorduğunu tahmin ediyorum. Sayfanın en önemli kısmı bu testin olmasıdır. "Is" operatörü, bir nesnenin çalışma zamanı türünün belirli bir türle uyumlu olup olmadığını kontrol etmek için kullanılır. Başka bir deyişle, bir nesnenin türünün olmasını beklediğimiz şey olduğunu doğrulamak için "is" operatörünü kullanırız. Şu sözdizimine bakalım: –
@SimonPrice C#: C# 6'nın şu anki sürümü hakkındadır. Bu soru, [pattern matching] 'a sahip C# 7 ile ilgilidir (https://blogs.msdn.microsoft.com/dotnet/2016/08/24/neyin-new-in-csharp-7-0 /). –
@bigown Ne tür bir detay arıyorsunuz? –