কীভাবে প্রকারের তুলনা করা যায়


130

তাত্ক্ষণিক প্রশ্ন: সি # তে অন্য প্রকারের সাথে কোনও প্রকারের (পাং উদ্দেশ্য নয়) কীভাবে তুলনা করবেন? আমি বলতে চাচ্ছি, আমি একটি করেছি Type typeFieldএবং আমি জানতে চাই যদি তা না হয় System.String, System.DateTimeইত্যাদি, কিন্তু typeField.Equals(System.String)কাজ করে না।

কোন সুত্র?

উত্তর:


179

নিম্নলিখিত চেষ্টা করুন

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

typeofC # অপারেটর আপনি একটি দেব Typeনামে টাইপ জন্য বস্তু। Typeউদাহরণগুলি ==অপারেটরের সাথে তুলনাযোগ্য তাই তাদের তুলনা করার জন্য এটি একটি ভাল পদ্ধতি।

দ্রষ্টব্য: যদি আমি সঠিকভাবে মনে করি তবে এমন কিছু ঘটনা ঘটে যখন জড়িত প্রকারগুলি সিওএম ইন্টারফেসগুলি যখন এসেম্বলিতে এম্বেড করা হয় (নোপিএআইয়ের মাধ্যমে) break এখানে যেমন হয় তেমন শব্দ হয় না।


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কেবল একবার নির্দিষ্ট ধরণের রূপান্তরিত হওয়ার সুবিধা রয়েছে ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.