সমাধান
new Guid()
পরিবর্তে আপনি ব্যবহার করতে পারেন
public void Problem(Guid optional = new Guid())
{
// when called without parameters this will be true
var guidIsEmpty = optional == Guid.Empty;
}
আপনি ব্যবহার করতে পারেন default(Guid)
default(Guid)
এছাড়াও ঠিক হিসাবে কাজ করবে new Guid()
।
কারণ গাইড একটি মান প্রকার নয় রেফারেন্স টাইপ, সুতরাং, এর default(Guid)
সমান নয়null
উদাহরণস্বরূপ, পরিবর্তে, এটি ডিফল্ট কন্সট্রাকটর আহ্বান সমান নয়।
যার অর্থ এই:
public void Problem(Guid optional = default(Guid))
{
// when called without parameters this will be true
var guidIsEmpty = optional == Guid.Empty;
}
এটি হুবহু মূল উদাহরণের মতো।
ব্যাখ্যা
কেন Guid.Empty
কাজ হয়নি ?
আপনি ত্রুটিটি পাওয়ার কারণটি কারণ Empty
হিসাবে সংজ্ঞায়িত হয়েছে:
public static readonly Guid Empty;
সুতরাং, এটি একটি পরিবর্তনশীল, ধ্রুবক নয় (হিসাবে হিসাবে সংজ্ঞায়িত করা হয় static readonly
না const
)। সংকলকটিতে কেবল প্যারামিটারের ডিফল্ট মানগুলি (কেবল রানটাইম-কেবল পরিচিত নয়) হিসাবে সংকলক-জ্ঞাত মান থাকতে পারে।
মূল কারণ যে আপনি একটি থাকতে পারে না হয় const
কোনোstruct
, enum
উদাহরণস্বরূপ পৃথক। আপনি যদি এটি চেষ্টা করেন তবে এটি সংকলন করবে না।
আর একবার কারণটি হ'ল এটি struct
কোনও আদিম ধরণের নয়।
.NET- এ সমস্ত আদিম ধরণের তালিকার জন্য দেখুন http://msdn.microsoft.com/en-gb/library/system.typecode.aspx
(নোট যেটি enum
সাধারণতint
, যা একটি আদিম)
কিন্তু new Guid()
খুব ধ্রুবকও নয়!
আমি বলছি না যে এটি একটি ধ্রুবক প্রয়োজন। এটি এমন কিছু প্রয়োজন যা সংকলন সময়ে সিদ্ধান্ত নেওয়া যেতে পারে।Empty
একটি ক্ষেত্র, সুতরাং, এটির সংকলন সময়ে (শুধুমাত্র রান সময়ের খুব শুরুর দিকে) এর মূল্য জানা যায় না।
ডিফল্ট প্যারামিটার মান অবশ্যই সংকলন সময়ে জানা থাকতে হবে, যা একটি const
মান হতে পারে বা একটি সি # বৈশিষ্ট্য ব্যবহার করে সংজ্ঞায়িত এমন কিছু যা সংকলন সময়ে মূল্যকে জ্ঞাত করে তোলে, যেমন default(Guid)
বা new Guid()
(যা সংকলনের সময় সিদ্ধান্ত নেওয়া হয় struct
যেহেতু আপনি struct
নির্মাণকারীকে সংশোধন করতে পারবেন না) কোড)।
আপনি যখন সরবরাহ করতে default
বা new
সহজেই সরবরাহ করতে পারেন তবে আপনি একটি সরবরাহ করতে পারবেন না const
(কারণ এটি আদিম ধরণের বা enum
উপরে বর্ণিত হিসাবে নয়)। সুতরাং, আবারও বলছেন না যে alচ্ছিক প্যারামিটারের একটি ধ্রুবক, তবে সংকলক জ্ঞাত মান প্রয়োজন।