এই সমস্যাটির কারণ কী?
আমার কাছে একটি সংকলক বাগের মতো দেখাচ্ছে। কমপক্ষে, এটা করেছে। যদিও decimal.TryParse(v, out a)এবং decimal.TryParse(v, out b)এক্সপ্রেশন পরিবর্তনশীল মূল্যায়ন করা হয়, আমি আশা কম্পাইলার এখনো বুঝতে যে সময় এটি ছুঁয়েছে দ্বারা a <= bউভয় aএবং bস্পষ্টভাবে নির্ধারিত হয়। এমনকি ডাইনামিক টাইপিংয়ের সাথে আপনি যে অদ্ভুততা অর্জন করতে পারেন, তার সাথে আমি a <= bউভয় TryParseকলকে মূল্যায়ন করার পরে কেবল মূল্যায়ন করার আশা করতাম ।
তবে, এটি প্রমাণিত হয়েছে যে অপারেটর এবং রূপান্তরিত কৌতূহলের মাধ্যমে, এমন একটি ভাব প্রকাশ করা সম্পূর্ণভাবে সম্ভব A && B && Cযা মূল্যায়ন করে Aএবং Cনা B- যদি আপনি যথেষ্ট চালাকি করেন। নীল গিটার্নের বুদ্ধিমান উদাহরণের জন্য রোজলিন বাগ প্রতিবেদনটি দেখুন ।
এটির সাথে কাজটি dynamicকরা আরও শক্ত - অপারেটরগুলি গতিশীল হওয়ার সময় জড়িত শব্দার্থবিজ্ঞানের বর্ণনা দেওয়া আরও কঠিন, কারণ ওভারলোড রেজোলিউশন সম্পাদনের জন্য আপনাকে কী ধরণের জড়িত রয়েছে তা অনুসন্ধানের জন্য অপারেশনগুলি মূল্যায়ন করতে হবে, যা পাল্টা স্বজ্ঞাত হতে পারে। যাইহোক, আবার নীল একটি উদাহরণ নিয়ে এসেছে যা দেখায় যে সংকলক ত্রুটি প্রয়োজন ... এটি কোনও বাগ নয়, এটি একটি বাগ ফিক্স । এটি প্রমাণ করার জন্য নিলের কাছে প্রচুর পরিমাণে কুদো।
এটি কি সংকলক সেটিংসের মাধ্যমে ঠিক করা সম্ভব?
না, তবে এমন বিকল্প রয়েছে যা ত্রুটি এড়ায়।
প্রথমত, আপনি এটিকে গতিশীল হতে বাধা দিতে পারেন - আপনি যদি জানেন যে আপনি কেবল কখনও স্ট্রিং ব্যবহার করেন তবে আপনি পরিসীমা পরিবর্তনশীলকে এক ধরণের (অর্থাত ) ব্যবহার করতে IEnumerable<string> বা দিতে পারেন । এটি আমার পছন্দসই বিকল্প হবে।vstringfrom string v in array
আপনার যদি সত্যিই এটিকে গতিশীল রাখার প্রয়োজন হয় তবে এটিকে bশুরু করার জন্য কেবল একটি মান দিন:
decimal a, b = 0m;
এটি কোনও ক্ষতি করবে না - আমরা জানি যে প্রকৃতপক্ষে আপনার গতিশীল মূল্যায়ন কোনও পাগল করবে না, তাই আপনি bপ্রাথমিক মানটিকে অপ্রাসঙ্গিক করে তোলার আগে আপনি কোনও মান নির্ধারণের কাজ শেষ করবেন ।
অতিরিক্তভাবে, দেখে মনে হচ্ছে যে বন্ধনী যুক্ত করাও খুব কার্যকর:
where decimal.TryParse(v, out a) && (decimal.TryParse("15", out b) && a <= b)
এটি সেই পয়েন্টে পরিবর্তন করে যেখানে ওভারলোডের বিভিন্ন ধরণের সমাধানের সূত্রপাত ঘটে এবং সংকলককে খুশি করে।
নেই এক সমস্যা এখনও অবশিষ্ট - সঙ্গে নির্দিষ্ট নিয়োগ উপর বৈশিষ্ট এর বিধিগুলি &&অপারেটর প্রয়োজন অবস্থায় ব্যাখ্যা করা যে, তারা শুধুমাত্র যখন প্রযোজ্য &&অপারেটর দুই সঙ্গে তার "নিয়মিত" বাস্তবায়ন ব্যবহৃত হচ্ছে booloperands। আমি এটি পরবর্তী ইসিএমএ স্ট্যান্ডার্ডের জন্য স্থির করে নেওয়ার চেষ্টা করব।
bমাধ্যমে নির্ধারণের পরে ব্যবহার করেout।