আমি কোডের টুকরোতে একটি ইউনিট পরীক্ষা লিখছিলাম যা জেএসএনকে ফিরিয়ে দিয়েছে। এটি যে ধরণের প্রত্যাবর্তন করে তা একটি বেনামি প্রকার, তাই আমি এতে মানগুলি যাচাই করার জন্য ভেবেছিলাম আমি কেবলমাত্র dynamic
আমার বক্তব্যগুলি করতে একটিতে বস্তুটি ফেলে দেব।
যাইহোক, আমি যখন এটি করি তখন আমার বিল্ডটি ব্যর্থ হয় তবে আমার কোনও ত্রুটির বার্তা নেই। আমি একটি নতুন ইউনিট পরীক্ষা প্রকল্পে খুব সাধারণ কোড দিয়ে এটি পুনরুত্পাদন করতে সক্ষম হয়েছি:
[TestMethod]
public void TestMethod1()
{
var obj = new { someValue = true };
dynamic asDynamic = obj;
Assert.IsTrue(asDynamic.someValue);
}
বিল্ড ব্যর্থতার স্ক্রিনশটের জন্য নীচে দেখুন
যদিও আমি দৃ as়তার সাথে মন্তব্যটি মন্তব্য করি তখন বিল্ডটি সফল হয়:
বিপরীতে, আমি লিনকপ্যাড 5 বিটাতে নিম্নোক্ত কোডটি চালিয়েছি (যা রোজলিন সংকলক ব্যবহার করে) এবং এতে কোনও সমস্যা নেই:
var obj = new { someValue = true };
dynamic asDynamic = obj;
Console.WriteLine((asDynamic.someValue == true).ToString());
সত্য
এখানে কি হচ্ছে? যেহেতু ত্রুটিটি প্রদর্শিত হচ্ছে তা আমি বলতে পারছি না আমি dynamic
ভুলভাবে ব্যবহার করছি কিনা , বা এটি IsTrue()
কারণের জন্য ওভারলোডটি খুঁজে পেতে পারে না, বা এটি যদি সংকলকটিতে dynamic
কোনও বাগ হয় (যদিও আমি এটি সম্পর্কে অত্যন্ত সন্দেহ করি , আমার কোডে কিছু ভুল আছে এর কোনও প্রমাণ আমার কাছে নেই)।
ওভারলোড সমস্যা সম্পর্কিত, আমি চেষ্টা করেছি Assert.IsTrue((bool)asDynamic.someValue);
কিন্তু বিল্ডটি এখনও ব্যর্থ হয়, তবুও কোনও ত্রুটি বার্তা নেই।
@ রনবিয়ারের মন্তব্যে, আমি আরও কাস্ট করার চেষ্টা করেছি যেমন নীচের মতো কোনও লাভ হয়নি:
dynamic asDynamic = (dynamic)obj;
Assert.IsTrue(((dynamic)asDynamic).someValue);
Assert.IsTrue((bool)asDynamic.somevalue);
কাছাকাছি পরিদর্শন করার পরে, আমি খুঁজে পেয়েছি আউটপুট উইন্ডোতে তালিকাভুক্ত একটি ত্রুটি ছিল:
সি: ... yn ডায়নামিকবিল্ডফেইল টেস্ট \ ইউনিটটেষ্ট ১.সি (16,33,16,42): ত্রুটি CS0656: অনুপস্থিত সংকলক প্রয়োজন সদস্য 'মাইক্রোসফ্ট.সিএসআরপ.রুনটাইমবাইন্ডার.সিএসআরএপিআরগমেন্টআইএনফো। ক্রিয়েট'
ঠিক আছে, ভিএস2013 ত্রুটিগুলি রিপোর্ট করা আরও ভাল, আমি এর উপর ভিত্তি করে অনুসন্ধান করব:
ঠিক আছে, মাইক্রোসফ্টের একটি রেফারেন্স যুক্ত করুন CS
dynamic asDynamic = (dynamic)obj;
? বা কেবল দৃ in়তার মধ্যে, গতিশীল মন্তব্য করুন এবং লিখুন Assert.IsTrue(((dynamic)obj).someValue);
।
Assert.IsTrue((bool)asDynamic.someValue);
?