নামের উপর ভিত্তি করে কীভাবে সম্পত্তি মান পাবেন


147

নামের উপর ভিত্তি করে কোনও জিনিসের সম্পত্তির মূল্য পাওয়ার কোনও উপায় কী?

উদাহরণস্বরূপ যদি আমার কাছে থাকে:

public class Car : Vehicle
{
   public string Make { get; set; }
}

এবং

var car = new Car { Make="Ford" };

আমি এমন একটি পদ্ধতি লিখতে চাই যেখানে আমি সম্পত্তির নামটি পাস করতে পারি এবং এটি সম্পত্তি মানটি ফিরিয়ে দিতে পারে। অর্থাৎ,

public string GetPropertyValue(string propertyName)
{
   return the value of the property;
}

উত্তর:


310
return car.GetType().GetProperty(propertyName).GetValue(car, null);

17
মনে রাখবেন যেহেতু এটি প্রতিবিম্বটি ব্যবহার করে তাই এটি অনেক ধীর। সম্ভবত কোনও সমস্যা নয়, তবে সচেতন হওয়া ভাল।
ম্যাট গ্রেয়ার

"স্ট্রিং থেকে বাইন্ডিং ফ্ল্যাজে রূপান্তর করা যায় না"
ক্রিস্টিন

5
@ ম্যাটগ্রিয়ারের কোনও "দ্রুত" উপায় আছে?
ফিজমাইক 15 ই

44

আপনি প্রতিবিম্ব ব্যবহার করতে হবে

public object GetPropertyValue(object car, string propertyName)
{
   return car.GetType().GetProperties()
      .Single(pi => pi.Name == propertyName)
      .GetValue(car, null);
}

আপনি যদি সত্যিই অভিনব হতে চান তবে আপনি এটিকে একটি এক্সটেনশন পদ্ধতি করতে পারেন:

public static object GetPropertyValue(this object car, string propertyName)
{
   return car.GetType().GetProperties()
      .Single(pi => pi.Name == propertyName)
      .GetValue(car, null);
}

এবং তারপর:

string makeValue = (string)car.GetPropertyValue("Make");

আপনি সেটভ্যালু
ম্যাট গ্রেয়ার

আমি কি সেটআপের জন্য এটি করতে পারি? কীভাবে?
পিয়েরো আলবার্তো

1
ছোটখাটো জিনিস- এক্সটেনশন পদ্ধতিতে সম্ভবত ভেরিয়েবলটির প্রয়োজন নেইcar
কাইলিমিট


35

আপনি প্রতিবিম্ব চান

Type t = typeof(Car);
PropertyInfo prop = t.GetProperty("Make");
if(null != prop)
return prop.GetValue(this, null);

7
+1 এটি সর্বোত্তম উত্তর হিসাবে আপনি সমস্ত মধ্যবর্তী বস্তুগুলি
ম্যাট গ্রেয়ার

1
সম্পত্তির মান পাস করার পরিবর্তে আমি কী সূচি পাস করতে পারি এবং সম্পত্তির নাম এবং মান পেতে পারি (যাতে আমি সমস্ত সম্পত্তি লুপ করতে পারি)?
সিংহসওয়াত

@ সিংসওয়াত আপনার নতুন প্রশ্ন হিসাবে এটি জিজ্ঞাসা করা উচিত
চক সেভেজ

7

সরল নমুনা (ক্লায়েন্টে প্রতিবিম্ব হার্ড কোড লেখার বাইরে)

class Customer
{
    public string CustomerName { get; set; }
    public string Address { get; set; }
    // approach here
    public string GetPropertyValue(string propertyName)
    {
        try
        {
            return this.GetType().GetProperty(propertyName).GetValue(this, null) as string;
        }
        catch { return null; }
    }
}
//use sample
static void Main(string[] args)
    {
        var customer = new Customer { CustomerName = "Harvey Triana", Address = "Something..." };
        Console.WriteLine(customer.GetPropertyValue("CustomerName"));
    }

7

এছাড়াও অন্যান্য ছেলেরা উত্তর দেয়, এক্সটেনশন পদ্ধতি ব্যবহার করে যে কোনও বস্তুর সম্পত্তি মূল্য পাওয়া সহজ its

public static class Helper
    {
        public static object GetPropertyValue(this object T, string PropName)
        {
            return T.GetType().GetProperty(PropName) == null ? null : T.GetType().GetProperty(PropName).GetValue(T, null);
        }

    }

ব্যবহার হ'ল:

Car foo = new Car();
var balbal = foo.GetPropertyValue("Make");

7

অ্যাডাম র্যাকিসের উত্তরের সম্প্রসারণ - আমরা এক্সটেনশন পদ্ধতিটিকে সাধারণভাবে তৈরি করতে পারি:

public static TResult GetPropertyValue<TResult>(this object t, string propertyName)
{
    object val = t.GetType().GetProperties().Single(pi => pi.Name == propertyName).GetValue(t, null);
    return (TResult)val;
}

আপনি যদি চান তবে তার আশেপাশে কিছু ত্রুটিও ছুঁড়ে দিতে পারেন।


1

প্রতিচ্ছবি এড়ানোর জন্য আপনি অভিধানের মান অংশে কী এবং ফাংশন হিসাবে আপনার যথাযথ নামগুলির সাথে একটি অভিধান সেট আপ করতে পারেন যা আপনার অনুরোধ করা বৈশিষ্ট্যগুলি থেকে সংশ্লিষ্ট মানগুলি ফেরত দেয়।

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