গাইড.নিউইউইজিড () গাইড E এম্পটি কিনা তাও দেখার মতো মূল্য আছে কি?


28

যে প্রকল্পগুলির মধ্যে আমি নিম্নলিখিত প্যাটার্নটিতে কাজ করছি তা মোটামুটি নিয়মিত ভিত্তিতে দেখা যায়:

var guid = Guid.NewGuid().ToString();
while (guid == Guid.Empty.ToString())
{
    guid = Guid.NewGuid().ToString();
}

যদিও আমি বুঝতে পেরেছি যে এএ জিইউডিটি অনন্য হওয়ার গ্যারান্টিযুক্ত নয় এবং এমএসডিএন ডকুমেন্টেশন অনুসারে একটি উত্পন্ন জিইউইউড শূন্য হতে পারে , এটি কি বাস্তবিক বিবেচনার ভিত্তিতে গণ্যগত দিক থেকে এবং বিকাশকারীদের সময় সম্পর্কে চিন্তাভাবনা উভয়ের জন্য চক্র পরীক্ষার পাঠানোর জন্য উপযুক্ত? ?


1
আপনি যদি এই প্যাটার্নটি বারবার দেখছেন তবে সম্ভবত কোনও ইউটিলিটি পদ্ধতি ক্রমযুক্ত হবে? এর মতো কোড খণ্ডগুলি পুনরাবৃত্তি করা এমন একটি বড় সমস্যা বলে মনে হয় যে আপনি এমন একটি প্রান্তের মামলাটি যাচাই করে যা কখনও ঘটবে না এবং তা ঘটতে পারে তা না হলেও পারা যায় না।
PSr

27
সেই কোডটি এলিগিটরদের দূরে রাখার জন্য রয়েছে। আপনি কোড লিখুন যেখানে অ্যালিগেটর আছে? কোন? তাহলে স্পষ্টতই এটি কাজ করে!
এরিক লিপার্ট

3
যাই হোক না কেন, আমি এটি একটি করণীয় সময়ে করতে হবে।
আর্টুরো টরেস সানচেজ

3
কেন পৃথিবীতে আপনি গাইডকে স্ট্রিংয়ে রূপান্তর করছেন এবং তারপরে তুলনা করছেন? তারা নিজেরাই জরিমানা তুলনা করে।
অ্যান্ডি

2
ডকুমেন্টেশন আপডেট হয়েছিল: "ফিরে GUID সমান নয় Guid.Empty নিশ্চিত করা হয়।"
sschoof

উত্তর:


33

আমি পরামর্শ দেব এটি গাইডের জন্য পরীক্ষা করার উপযুক্ত নয় mp কিছু কারণের জন্য গাইড.ইউউইউইডের দস্তাবেজগুলি এটি উল্লেখ করে

নতুন গাইডের মান সমস্ত শূন্য বা অন্য কোনও গাইডের সমান হবে এমন সুযোগ খুব কম।

গাইড.নিউইউজিড হ'ল উইন 32 এপিআই কোক্রেটগুইডের একটি মোড়ক যা সমস্ত জিরো ফিরিয়ে দেওয়ার কোনও উল্লেখ করে না।

রেমন্ড চেন আরও পরামর্শ দিয়েছিলেন suggest

CoCreateGuid এর কোনও বৈধ বাস্তবায়ন GUID_NULL উত্পন্ন করতে পারে না rate

সুতরাং, না, আমি এটি নিয়ে চিন্তা করব না। আমি অনুমান করব না কেন গাইড N নিউগুইড ডকস কেন এটি উল্লেখ করে।


1
"এবং যদি এটি কোনও কারণে জিইউইডি_এনএলএল উত্পন্ন করেও, স্বতন্ত্রতার জন্য এটি কেবল একবারই করা দরকার! (সুতরাং আপনার এই বাগটি পরীক্ষায় আসতে বাধ্য করা উচিত, এবং তারপরে আপনি আত্মবিশ্বাসী হতে পারেন যে এটি কখনও উত্পাদনে ঘটবে না)। ) "- চমৎকার!
রাজেস্তেস্ট্রে

3
@ রেজাষ্টেস্ট্রে - আমার ক্যাসিনোতে আপনি যা চান তা বাজি রাখতে পারেন।
জেফো

10
@ জেফো জোকস আপনার উপর, তিনি ঘরে বসে ৩ বার স্পিন করা নিশ্চিত করেছেন এবং যে সমস্ত টাকা আসে নি তার উপর তার সমস্ত অর্থ রাখবেন।
র্যান্ডম 832

এক্সমারিনে, গাইড.ইউইউইউইজি কখনও কখনও ব্যর্থ হয় এবং অবিচ্ছিন্নভাবে খালি ফিরে আসে (যখন ইফ কোরটিতে স্বয়ংক্রিয়ভাবে নির্দেশিকা নির্ধারিত হয়) কেন তা
অনুধাবন

@ করণ হর্ষ ওয়ার্ধান আমি আশা করি আপনি এটি একটি বাগ হিসাবে রিপোর্ট করেছেন। :)
কর্ট নিকোলস

43

যদি আপনি খুঁজে পান যে Guid.NewGuid() == Guid.Emptyআপনি পৃথিবীর সবচেয়ে কঠিন লটারি জিতেছেন। কোনও স্বাতন্ত্র্য বা সংঘর্ষের চেকিং নিয়ে বিরক্ত করবেন না। যে কি guids তা করে হচ্ছে না জন্য । আমি আপনাকে গণিতটি ছাড়িয়ে দেব, এটি ওয়েবে সর্বত্র।

এছাড়াও, উইন্ডোজ গাইডগুলিতে সর্বদা একটি "অঙ্ক" সমান থাকে 4। গাইডদের কিছু কাঠামো আছে।

আপনার পোস্ট করা কোড স্নিপেট দেখে মনে হচ্ছে কোনও দেব একটি Guidভেরিয়েবল আরম্ভ করতে ভুলে গিয়েছিলেন এবং এটি পেয়েছেন Guid.Empty। তিনি ভুল Guid.NewGuid()করে কারণ হিসাবে চিহ্নিত করেছিলেন। এখন তিনি চিরকাল কুসংস্কারের সাথে এতে বিশ্বাস করবেন।

যে কোনও ক্ষেত্রে এটি জিজ্ঞাসা করা ভুল প্রশ্ন। আমি নিশ্চিত যে আপনার কোডটি কেবল কখনও অঙ্কন Guid.Emptyনয় বরং স্বতন্ত্রতার উপরও নির্ভর করে না । এই whileলুপটি স্বতন্ত্রতা প্রয়োগ করে না। সমন্বয় ছাড়াই একটি অনন্য মূল্য উত্পাদন করতে গাইড রয়েছে । এটি তাদের ব্যবহারের ক্ষেত্রে।


5
"জিজ্ঞাসা করার জন্য ভুল প্রশ্ন" থেকে +1। এটি সমস্ত স্বাতন্ত্র্য সম্পর্কে, এটিই সত্যই গুরুত্বপূর্ণ।
থমাস স্ট্রিংগার

1
@ আরজজিই এটিকে গ্রহণযোগ্য উত্তর হিসাবে বিবেচনা করুন!
emcor

18

সোর্স কোড Guid.NewGuidপদ্ধতি :

public static Guid NewGuid() {
    Contract.Ensures(Contract.Result<Guid>() != Guid.Empty);
    ...
}

কোড চুক্তি দেখুন? Guid.NewGuidপদ্ধতি কখনোই একটি খালি GUID দেয়।


2
আপনি কেন ডাউনটা পেয়েছিলেন তা নিশ্চিত নন, কারণ এটিতে এমন কিছু উল্লেখ রয়েছে যা অন্য উত্তরে অনুপস্থিত। কোড চুক্তির উপস্থিতি একটি বেশ ভাল গ্যারান্টি, এবং এটি আসল প্রশ্নের একটি দুর্দান্ত উত্তর দেয়। প্রকৃত বাস্তবায়ন দেখার ধারণার জন্য +1।
আর্সেনি মরজেনকো

আমি কোড চুক্তি পছন্দ।
অ্যান্ডি

10

আপনি যদি শূন্য জিআইইডির বিপরীতে জিইউডি পরীক্ষা করতে যাচ্ছেন তবে একই যুক্তি অনুসারে আপনার অ্যাপ্লিকেশনের অন্যান্য সমস্ত জিইউইডিওর বিরুদ্ধে এটি পরীক্ষা করার যথাযথ প্রচেষ্টা করতে হবে (শূন্য পাওয়ার সম্ভাবনা যেমন হ'ল তার সম্ভাবনার সমান হওয়া উচিত) আপনার অ্যাপ্লিকেশনটিতে অন্য কোনও জিইউইডি পাওয়া *)। আপনি যে অক্ষরটির অধীনে কাজ করছেন তা প্রমাণ করার জন্য আপনাকে এটি করতে হবে এটি হ'ল এই জিইউডিটি অনন্য হবে (যা আসলে বনাম 0 এর মতো একই অক্ষ) i

অবশ্যই এটি করা অবাস্তব।

TLDR; আপনি যদি অনন্য ফলাফল তৈরি করতে নিউগুইড () -এ বিশ্বাস করতে পারেন তবে কোনও একক জ্ঞাত জিআইডি তৈরি না করার জন্যও আপনি এটি বিশ্বাস করতে পারেন।

* এটি প্রকৃতপক্ষে একই জাতীয় সম্ভাবনা নয়। নেট {________-____-4___-____-____________}নির্দেশিকা সর্বদা নীচের সাথে ফিট করে তাই নিউগুইড কখনও শূন্য নির্দেশিকা তৈরি করে না

কেবল মজাদার জন্য আমি এখানে ডক্সে উন্নতির পরামর্শ দিয়েছি: http://feedback.msdn.com/forums/257782-msdn-feature-suggestions/suggestions/7143498-fix-docamentation-for-newguid


3
নেট গাইডগুলিতে সর্বদা একটি 4 অন্তর্ভুক্ত থাকে কেন?
আর্টুরো টরেস সানচেজ

9
@ আর্টুরো টরেস সানচেজ: আপনার প্রশ্নের উত্তর এবং জিইউইডি সম্পর্কে আরও মজাদার তথ্যগুলির জন্য, আমার নিবন্ধের সিরিজটি দেখুন যা এখানে শুরু হয়। ericlippert.com/2012/04/24/guid-guide-part- এক আমি নোট করেছি যে লুক ইতিমধ্যে আপনার সুবিধার জন্য অংশ তিনটির সাথে লিঙ্ক করেছেন। সংক্ষিপ্ত উত্তর: সংস্করণ 4 জিইউইডিগুলিতে সর্বদা একটি 4 অন্তর্ভুক্ত থাকে
এরিক লিপার্ট

@ এরিকলিপার্ট এটি একটি খুব ভাল নিবন্ধ :)
পছন্দ করেননি তাদের লোকদের ২
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.