সম্পত্তির ধরণটি খুঁজে পেতে সম্পত্তিInfo ব্যবহার করে


108

আমি কিছু কাস্টম বৈধতা করতে ডায়নামিকভাবে কোনও অবজেক্ট ট্রিকে পার্স করতে চাই। বৈধতা যেমন হিসাবে গুরুত্বপূর্ণ নয়, তবে আমি সম্পত্তি সম্পত্তি সম্পর্কিত ক্লাসটি আরও ভালভাবে বুঝতে চাই।

আমি এরকম কিছু করবো,

public bool ValidateData(object data)
{
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
    {
        if (the property is a string)
        {
            string value = propertyInfo.GetValue(data, null);

            if value is not OK
            {
                return false;
            }
        }
    }            

    return true;
}

এই মুহুর্তে আমি কেবলমাত্র শুধুমাত্র যত্নের বিষয় হ'ল সম্পত্তি যদি একটি স্ট্রিং হয় '। প্রপার্টিআইনফোর অবজেক্টটি কী ধরণের তা আমি কীভাবে জানতে পারি।

স্ট্রিংস, ইনটস, ডাবলসের মতো বেসিক স্টাফগুলির সাথে আমার মোকাবেলা করতে হবে। তবে আমাকে অবজেক্টগুলির সাথেও লেনদেন করতে হবে এবং যদি তাই হয় তবে আমি যদি তাদের ভিতরে থাকা মৌলিক ডেটাগুলি যাচাই করতে অবজেক্ট ট্রিটিকে আরও নীচে নিয়ে যেতে পারি তবে তাদের স্ট্রিং ইত্যাদি থাকবে etc.

ধন্যবাদ।

উত্তর:


215

PropertyInfo.PropertyTypeসম্পত্তির ধরণ পেতে ব্যবহার করুন ।

public bool ValidateData(object data)
{
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
    {
        if (propertyInfo.PropertyType == typeof(string))
        {
            string value = propertyInfo.GetValue(data, null);

            if value is not OK
            {
                return false;
            }
        }
    }            

    return true;
}

1
গ্রেট। আমি এটি চেষ্টা করব। টাইপফ (স্ট্রিং) এবং টাইপফ (স্ট্রিং) সমান? উপরের দুটি স্ট্রিং এবং স্ট্রিং দিয়ে থাকবে?
পিটার

3
ঠিক আছে, কিছু ইউনিট পরীক্ষা লিখেছেন এবং এটি একটি ট্রিট কাজ করে। এটি প্রকৃতপক্ষে স্ট্রিং এবং স্ট্রিংকে একই আচরণ করে। আমি এটি প্রত্যাশা করেছিলাম, তবে কেবল এটি নিশ্চিত করতে চেয়েছিলাম।
পিটার

4
@ পেটার হ্যাঁ, stringএবং Stringসমান। stringজন্য একটি উপনাম String
বয়স

IsAssignableFrom পদ্ধতি: msdn.microsoft.com/en-us/library/... (সমান অপারেটর পরিবর্তে, যেমন জেনেরিক্স) আরো ক্ষেত্রেই কাজ করবে
মার্টিন

1
@ সাম্প্রতিক কয়েক বছর আগে এই মন্তব্যটি দেখেছি তবে আমি কেবল stringএকটি স্পষ্টতা যোগ করতে চাই যে এটির একটি নাম System.String। এটি একটি পার্থক্য করতে পারে কারণ ব্যবহার Stringকরতে আপনাকে using System;লাইন যুক্ত করতে হবে । আমার 2 সেন্ট;)
সাবাস্তিয়ান সেভরিন

0

আমি কেবল এই দুর্দান্ত পোস্টে হোঁচট খেয়েছি। যদি আপনি কেবল ডাটা স্ট্রিং টাইপের কিনা তা পরীক্ষা করে দেখেন তবে আমরা লুপটি এড়িয়ে এই কাঠামোটি ব্যবহার করতে পারি (আমার বিনীত মতে)

public static bool IsStringType(object data)
    {
        return (data.GetType().GetProperties().Where(x => x.PropertyType == typeof(string)).FirstOrDefault() != null);
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.