हमें उदाहरण के लिए एक वर्ग परिभाषा के साथ शुरू करते हैं:संघ
{"Robby", "Goki", 12, 8}
{"Bobby", "Goki", 10, 8}
{"Sobby", "Goki", 10, 8}
:
public class Person
{
public string FirstName;
public string LastName;
public int Age;
public int Grade;
}
अब मैं एक List<Person>
बुलाया people
3 वस्तुओं से युक्त है मान लें
{null, "Goki", -1, 8}
:
क्या मैं देख रहा हूँ किसी तरह निम्नलिखित एकल Person
वस्तु पुनः प्राप्त करने के लिए है
जहां सभी ऑब्जेक्ट्स में समान फ़ील्ड अपना मान बनाए रखते हैं, जबकि फ़ील्ड जिनमें एकाधिक मान हैं, अमान्य मान के साथ प्रतिस्थापित किए जाते हैं।
Person unionMan = new Person();
if (people.Select(p => p.FirstName).Distinct().Count() == 1)
unionMan.FirstName = people[0].FirstName;
if (people.Select(p => p.LastName).Distinct().Count() == 1)
unionMan.LastName = people[0].LastName;
if (people.Select(p => p.Age).Distinct().Count() == 1)
unionMan.Age = people[0].Age;
if (people.Select(p => p.Grade).Distinct().Count() == 1)
unionMan.Grade = people[0].Grade;
दुर्भाग्य से, वास्तविक व्यापार वस्तु चार से कई अधिक सदस्य हैं और इस किसी और को देखने के लिए पहली बार के लिए दोनों लिखने के लिए कठिन और भारी है:
मेरी पहली सोचा शामिल थे।
मैं भी एक पाश में इन दोहराए नियंत्रण और कार्य डाल करने के लिए प्रतिबिंब का इस्तेमाल कर रही किसी भी तरह माना:
string[] members = new string[] { "FirstName", "LastName", "Age", "Grade" };
foreach (string member in members)
{
if (people.Select(p => p.**member**).Distinct().Count() == 1)
unionMan.**member** = people[0].**member**;
}
जहां ** सदस्य ** होगा लेकिन प्रतिबिंब पुनः प्राप्ति और भंडारण की अनुमति होगी उस विशेष सदस्य (मान लीजिए कि यह संभव है)।
जबकि पहला समाधान काम करेगा, और दूसरा मैं मानता हूं कि काम करेगा, क्या किसी के पास इस समस्या का बेहतर वैकल्पिक समाधान है? यदि नहीं, ऊपर वर्णित प्रतिबिंब का उपयोग करना संभव है?
खैर , आपके दूसरे के विचार को काम करना चाहिए, लेकिन वास्तव में दिखाए गए कोड के साथ नहीं! वैसे, आपके पास अपने "अमान्य" मान वाले व्यक्ति के लिए डिफ़ॉल्ट कन्स्ट्रक्टर होना चाहिए। –