मुझे पता है कि इस पर बहुत सारी पोस्टें हैं लेकिन यह अभी भी मुझे भ्रमित करता है कि आपको आइलिस्ट जैसे इंटरफ़ेस में पास क्यों होना चाहिए और आईलैस्ट जैसे इंटरफ़ेस को ठोस सूची के बजाय वापस करना चाहिए।
मैंने बहुत सारी पोस्ट पढ़ीं कि यह कैसे कार्यान्वयन को बाद में बदलना आसान बनाता है, लेकिन मैं अभी पूरी तरह से नहीं देखता कि यह कैसे काम करता है।
कहो तो मेरे पास यह विधि है
public class SomeClass
{
public bool IsChecked { get; set; }
}
public void LogAllChecked(IList<SomeClass> someClasses)
{
foreach (var s in someClasses)
{
if (s.IsChecked)
{
// log
}
}
}
मुझे यकीन नहीं है कि IList का उपयोग करने से मुझे भविष्य में कैसे मदद मिलेगी।
कैसे के बारे में अगर मैं पहले से ही विधि में हूं? क्या मुझे अभी भी IList का उपयोग करना चाहिए?
public void LogAllChecked(IList<SomeClass> someClasses)
{
//why not List<string> myStrings = new List<string>()
IList<string> myStrings = new List<string>();
foreach (var s in someClasses)
{
if (s.IsChecked)
{
myStrings.Add(s.IsChecked.ToString());
}
}
}
अब मुझे IList का उपयोग करने के लिए क्या मिलेगा?
public IList<int> onlySomeInts(IList<int> myInts)
{
IList<int> store = new List<int>();
foreach (var i in myInts)
{
if (i % 2 == 0)
{
store.Add(i);
}
}
return store;
}
अभी के बारे में कैसे? क्या इंट की सूची में कुछ नया कार्यान्वयन है जिसे मुझे बदलने की आवश्यकता होगी?
मूल रूप से, मुझे कुछ वास्तविक कोड उदाहरणों को देखने की आवश्यकता है कि कैसे IList का उपयोग करके सूची में सब कुछ लेने पर कुछ समस्या हल हो गई होगी।
मेरे पढ़ने से मुझे लगता है कि मैं IList के बजाय IEnumberable का उपयोग कर सकता था क्योंकि मैं सिर्फ सामान के माध्यम से पाशन कर रहा हूं।
संपादित करें तो मैं ऐसा करने के तरीके पर अपने तरीकों के कुछ के साथ चारों ओर खेल रहे हैं। मैं अभी भी वापसी प्रकार के बारे में निश्चित नहीं हूं (यदि मुझे इसे और अधिक ठोस या इंटरफ़ेस बनाना चाहिए)।
public class CardFrmVm
{
public IList<TravelFeaturesVm> TravelFeaturesVm { get; set; }
public IList<WarrantyFeaturesVm> WarrantyFeaturesVm { get; set; }
public CardFrmVm()
{
WarrantyFeaturesVm = new List<WarrantyFeaturesVm>();
TravelFeaturesVm = new List<TravelFeaturesVm>();
}
}
public class WarrantyFeaturesVm : AvailableFeatureVm
{
}
public class TravelFeaturesVm : AvailableFeatureVm
{
}
public class AvailableFeatureVm
{
public Guid FeatureId { get; set; }
public bool HasFeature { get; set; }
public string Name { get; set; }
}
private IList<AvailableFeature> FillAvailableFeatures(IEnumerable<AvailableFeatureVm> avaliableFeaturesVm)
{
List<AvailableFeature> availableFeatures = new List<AvailableFeature>();
foreach (var f in avaliableFeaturesVm)
{
if (f.HasFeature)
{
// nhibernate call to Load<>()
AvailableFeature availableFeature = featureService.LoadAvaliableFeatureById(f.FeatureId);
availableFeatures.Add(availableFeature);
}
}
return availableFeatures;
}
अब मैं आईएलस्ट को साधारण तथ्य के लिए वापस कर रहा हूं कि मैं इसे अपने डोमेन मॉडल में जोड़ दूंगा जिसके पास इस तरह की संपत्ति है:
public virtual IList<AvailableFeature> AvailableFeatures { get; set; }
ऊपर एक IList ही है क्योंकि यह वही है जो nhibernate के साथ उपयोग करने के लिए मानक है। अन्यथा मैं IEnumberable वापस लौट सकता था लेकिन निश्चित नहीं। फिर भी, मैं यह पता नहीं लगा सकता कि उपयोगकर्ता को 100% क्या चाहिए (यह वह जगह है जहाँ कंक्रीट वापस करने का एक फायदा है)।
संपादित करें २
मैं यह भी सोच रहा था कि क्या होगा अगर मैं अपने तरीके से संदर्भ देकर पास करना चाहता हूं?
private void FillAvailableFeatures(IEnumerable<AvailableFeatureVm> avaliableFeaturesVm, IList<AvailableFeature> toFill)
{
foreach (var f in avaliableFeaturesVm)
{
if (f.HasFeature)
{
// nhibernate call to Load<>()
AvailableFeature availableFeature = featureService.LoadAvaliableFeatureById(f.FeatureId);
toFill.Add(availableFeature);
}
}
}
क्या मैं इसके साथ समस्याओं में भाग सकता हूं? चूंकि वे एक सरणी (जो एक निश्चित आकार है) में पास नहीं हो सकते थे? क्या यह एक ठोस सूची के लिए बेहतर होगा?