प्रकारों की तुलना कैसे करें


130

त्वरित प्रश्न: C # में एक अन्य प्रकार के साथ एक प्रकार का प्रकार (वाक्य का इरादा नहीं) की तुलना कैसे करें? मेरा मतलब है, मैं एक है Type typeFieldऔर मैं जानना चाहता हूँ अगर यह होता है System.String, System.DateTime, आदि, लेकिन typeField.Equals(System.String)काम नहीं करता है।

कोई सुराग?

जवाबों:


179

निम्नलिखित का प्रयास करें

typeField == typeof(string)
typeField == typeof(DateTime)

typeofसी # में ऑपरेटर आप एक दे देंगे Typeनामित प्रकार के लिए वस्तु। Typeउदाहरणों के साथ तुलनीय हैं== ऑपरेटर के इसलिए उनकी तुलना करने के लिए यह एक अच्छा तरीका है।

नोट: अगर मुझे सही तरीके से याद है, तो कुछ ऐसे मामले हैं जिनमें शामिल होने पर यह टूट जाता है जैसे COM इंटरफेस हैं जो असेंबली (NoPIA के माध्यम से) में एम्बेडेड हैं। इस तरह से ध्वनि नहीं है यहाँ मामला है।


74

आप इसके लिए is ऑपरेटर का उपयोग कर सकते हैं । आप तब जांच सकते हैं कि क्या वस्तु विशिष्ट प्रकार से लिख रही है:

if (myObject is string)
{
  DoSomething()
}

3
क्या यह हमारे लिए बेहतर है "" या "टाइपोफ"?
ब्रेंट वैगनर

32

आप का उपयोग कर बिल्कुल उसी प्रकार के लिए तुलना कर सकते हैं:

class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}

टाइपोफ़ किसी दिए गए वर्ग से टाइप ऑब्जेक्ट लौटाता है।

लेकिन अगर आपके पास एक बी है, जो ए से विरासत में मिला है, तो यह तुलना झूठी है। और आप IsAssignableFrom की तलाश कर रहे हैं ।

class B : A {
}
var b = new B();
var typeOfb = b.GetType();

if (typeOfb == typeof(A)) { // false
}

if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}

7

यदि आपका उदाहरण है Type:

Type typeFiled;
if (typeField == typeof(string))
{ 
    ... 
}

लेकिन अगर आपका उदाहरण एक है objectऔर ऑपरेटर का Typeउपयोग नहीं करता है as:

object value;
string text = value as string;
if (text != null)
{
    // value is a string and you can do your work here
}

इसका valueकेवल एक बार निर्दिष्ट प्रकार में परिवर्तित करने का लाभ है ।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.