डेटा फ़ाइल: (data.txt) लाइनों का प्रतिनिधित्व width height
सी # 4.0 उलझाव से टाइप गतिशील ऑब्जेक्ट्स
5
6 9
7 2
4 4
सी # कोड:
var list = new List<dynamic>();
using (var sr = new StreamReader("Data.txt", Encoding.UTF8))
{
list = sr.ReadToEnd().Split('\n').Select(r =>
{
var split = r.Split(' ');
var len = split.Length;
return new {
w = len > 0 ? int.Parse(split[0].Trim()) : 0,
h = len > 1 ? int.Parse(split[1].Trim()) : 0
} as dynamic;
}).ToList();
}
int Area = list.Sum(r => r.h * r.w);
उदाहरण काम करता है के रूप में। मुझे इसे काम करने के लिए कुछ अवांछित चीजें करना पड़ा।
सबसे पहले मुझे उपयोग के दायरे से बचने के लिए सूची घोषित करना पड़ा - क्योंकि मेरे पास टाइपेड आयाम ऑब्जेक्ट नहीं है, मैंने टाइप गतिशील (var list = new List<dynamic>()
) बनाया है।
अवांछनीय हिस्सा अज्ञात ऑब्जेक्ट को गतिशील (as dynamic
) पर कास्टिंग कर रहा है। अन्यथा मैं
परोक्ष प्रकार कनवर्ट नहीं कर सकता
System.Collections.Generic.List<AnonymousType#1>
System.Collections.Generic.List<dynamic>
को क्यों मैं इस त्रुटि मिलती है मिल सकता है? मुझे पता है कि एक गतिशील गुमनाम प्रकार पकड़ सकता है, तो क्या यह ToList()
एक्सटेंशन और गतिशीलता के साथ एक समस्या है?
मुझे क्षेत्र की गणना करने वाली अंतिम पंक्ति में, उपयोग कथन के बाहर अज्ञात सूची आइटम तक पहुंचने में सक्षम होना चाहिए।
समाधान: मैं DTB के जवाब के साथ चला गया। यह सभी एक साथ उपयोग कथन और गतिशीलता के उपयोग से परहेज किया। निवेश के लिए आप सभी को धन्यवाद!
var list =
(from line in File.ReadLines("Data.txt")
let parts = line.Split(' ')
let width = int.Parse(parts[0])
let height = parts.Length > 1 ? int.Parse(parts[1]) : 0
select new { width, height }).ToList();
तुम क्यों इस तरह गतिशील उपयोग कर रहे हैं? – ChaosPandion
गतिशील का अनुचित उपयोग। आप * प्रकार * जानते हैं, इसे गतिशील बनाने के लिए कोई लाभ नहीं है। एक संरचना या टुपल <> का प्रयोग करें। –
तो क्या आप कह रहे हैं कि अनाम प्रकार के साथ ऐसा करने का कोई तरीका नहीं है? –