मैं निम्नलिखित कोड को देखा,सी # - यह आवश्यक जाँच कर रहा है "व्यक्ति && obj है obj = अशक्त!"
public override bool Equals(object obj)
{
// From the book http://www.amazon.co.uk/Pro-2010-NET-4-0-Platform/dp/1430225491
// Page 254!
if (obj is Person && obj != null)
...
}
मेरी समझ के आधार पर, मुझे लगता है कि इस प्रकार कोड फिर से लिखा जाना चाहिए:
public override bool Equals(object obj)
{
if (obj is Person)
...
}
क्या यह सही है?
http://msdn.microsoft.com/en-us/library/scekt9xw%28v=vs.80%29.aspx
पर एक अभिव्यक्ति है के आधार सही का आकलन करता है, तो प्रदान की अभिव्यक्ति में गैर-शून्य है, और प्रदान की वस्तु के कारण एक अपवाद फेंका जा करने के लिए बिना प्रदान की प्रकार के डाली जा सकती है।
मुझे लगता है कि शून्य के लिए अतिरिक्त जांच बिल्कुल आवश्यक नहीं है। दूसरे शब्दों में, वह कोड "obj! = Null" कभी भी हिट नहीं होना चाहिए।
धन्यवाद
// अद्यतन //
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Employee
{
public static void CheckIsEmployee(object obj)
{
if (obj is Employee)
{
Console.WriteLine("this is an employee");
}
else if (obj == null)
{
Console.WriteLine("this is null");
}
else
{
Console.WriteLine("this is Not an employee");
}
}
}
class NotEmployee
{ }
class Program
{
static void Main(string[] args)
{
Employee e = new Employee();
Employee.CheckIsEmployee(e);
Employee f = null;
Employee.CheckIsEmployee(f);
NotEmployee g = new NotEmployee();
Employee.CheckIsEmployee(g);
}
}
}
आउटपुट परिणाम:
this is an employee
this is null
this is Not an employee
इस बात पर निर्भर करता है कि 'is' की परिभाषा क्या है ;-) .NET के मामले में,' as' आंतरिक रूप से 'है' करता है और परिणाम 'शून्य' होने पर 'शून्य' पर सेट करता है। यदि कभी-कभी 'शून्य' की अपेक्षा की जा सकती है तो jlew का समाधान अधिक इष्टतम होता है। –
@ एरिक जे: डी। 'As' का उपयोग करने का कारण मुख्य रूप से बाद में टाइप किए गए उदाहरण का उपयोग करना है। इसलिए, 'jlew' के समाधान में, आप (संभवतः) को' व्यक्ति 'के रूप में' ओब्जे 'के रूप में डालने की आवश्यकता होगी, यह निर्धारित करने के बाद कि यह शून्य नहीं था ताकि आप शेष बराबर मूल्यांकन कर सकें। एक ही परिणाम के लिए कोड या दो कोड बचाता है। – Thomas