यहां foreach
लूप के साथ एक साधारण विधि है:"डू"/एक्शन LINQ ऑपरेटर के लिए कोई योजना?
IEnumerable<XElement> FieldsToXElements(object instance)
{
var fieldElements = new List<XElement>();
foreach (var field in instance.GetType().GetFields(instance))
{
fieldElements.Add(new XElement(field.Name, field.GetValue(instance)));
}
return fieldElements;
}
बदसूरत की तरह। यदि LINQ में कुछ ऑपरेटर थे जिसका अर्थ है "कुछ करें" (उदाहरण के लिए LINQ कथन में चयनित प्रत्येक के लिए Action
निष्पादित करें), यह अच्छा लगेगा, अधिक terse:
IEnumerable<XElement> FieldsToXElements(object instance)
{
var fieldElements = new List<XElement>();
from field in instance.GetType().GetFields(instance))
let name = field.Name
let value = field.GetValue(instance)
do fieldElements.Add(new XElement(name, value));
return fieldElements;
}
मुझे एहसास है कि यह व्यक्तिपरक है, और बस मेरा राय। एक फोरैच लूप के लिए जिसमें एक पंक्ति है जो बस एक विधि का आह्वान करती है, मेरी राय में "do
" ऑपरेटर समझ में आता है। लेकिन मैं सोच रहा हूं कि एमएस में किसी ने भी यही बात सोचा है। क्या ऐसे LINQ ऑपरेटर किसी भी आगामी रिलीज में योजनाबद्ध है (उदाहरण के लिए सी # 4.0 पदार्पण के साथ)?
यहां एक और उदाहरण है, एक अनुमान के साथ, जहां काल्पनिक do
ऑपरेटर वास्तव में कोड को क्लीनर बना देगा। यह:
IEnumerable<XElement> FieldsToXElements
(object instance, Func<FieldInfo, bool> predicate)
{
var fieldElements = new List<XElement>();
foreach (var field in instance.GetType().GetFields(instance).Where(predicate))
{
fieldElements.Add(new XElement(field.Name, field.GetValue(instance)));
}
return fieldElements;
}
बनाम यह:
IEnumerable<XElement> FieldsToXElements
(object instance, Func<FieldInfo, bool> predicate)
{
var fieldElements = new List<XElement>();
from field in instance.GetType().GetFields(instance))
let name = field.Name
let value = field.GetValue(instance)
where predicate(field)
do fieldElements.Add(new XElement(name, value));
return fieldElements;
}
कार्य छोटा है। मुझे कोड की "सुंदरता" में अधिक दिलचस्पी है। :) – core