গাইড.নিউইগুইড () বনাম নতুন গাইড ()


347

মধ্যে পার্থক্য কি Guid.NewGuid()এবং new Guid()?

কোনটি পছন্দ হয়?


6
@ ক্লিন্টন ওয়ার্ড আমি সি # এবং @ বব 2 চিভের পক্ষে কার্যত নতুন I আমি এখনই প্রকল্পটি চালাতে পারছি না এবং এটি সম্পর্কে কৌতূহল ছিল।
অস্কার রাইজ

6
@ অস্কাররিজ - সি # তে দ্রুত কোড পরীক্ষার জন্য আমি লিনকপ্যাড ব্যবহার করি
ডেভশো

5
আসলে আমি বিশ্বাস করি যে এই প্রশ্নটি প্রাসঙ্গিক, কারণ এটি বিভ্রান্তিকর এবং আমি সত্যিই সেরা ডিফল্ট হিসাবে "0000000-0000 .." করি না। আমি শুধু একটি সমস্যা যেখানে একটি ক্লায়েন্ট () কারণে প্রকল্পটি নতুন GUID ভিতরে গহিন একটি সিস্টেম লগইন করতে পারিনি NewGuid () এর পরিবর্তে বলা হয় গাড়ীতে আঘাত
Michiel Cornille

3
@ ডেভশা - লিনকিউপ্যাড দুর্দান্ত এবং আমি এটি প্রচুর ব্যবহার করি। তবে আমি এটি উল্লেখ করতে চেয়েছিলাম যে ভিজ্যুয়াল স্টুডিওতে এখন একটি "সি # ইন্টারেক্টিভ" উইন্ডো রয়েছে যা এই ধরণের পরীক্ষার জন্য খুব দরকারী।
মেইয়ার

1
@ মিশেলকর্নিল সবেমাত্র অনুভূতির ভাইটি জানতে পেরেছিলেন ...
জিনস পিটার

উত্তর:


583

new Guid() একটি "খালি" অল -0 গাইড (00000000-0000-0000-0000-00000000000000 খুব কার্যকর নয়) তৈরি করে।

Guid.NewGuid() আপনি সম্ভবত যা চান তা একটি অনন্য মান সহ একটি আসল গাইড করে।


26
একটি খালি ইউআইডি সত্যই কার্যকর। এটি একটি দুর্দান্ত বিশেষ মান করে।
জন হান্না

103
পার্শ্ব নোটে, new Guid()সমান Guid.Empty
স্টিভ গুইদি

30
@ জোহান্না সমস্ত গাইড দুর্দান্ত বিশেষ মান দেয়। দুর্ভাগ্যক্রমে, খালিগুলিতে সংঘর্ষের প্রবণতা রয়েছে। আমি সম্মত হই যে খালি গাইডগুলি যদিও কার্যকরভাবে কিছু কার্যকর হয় তা নির্দেশ করার জন্য কার্যকর।
MarkPflug

5
খালিগুলি খুব কার্যকরী কারণ তারা সংঘর্ষ করে। একটি বিশেষ মান যা জানা বিশেষ মানের সাথে সংঘর্ষে আসে না তা অকেজো হবে।
জন হানা

5
আমি মনে করি আপনি উভয়ই সম্মত হচ্ছেন যে এটি তুলনামূলকভাবে একটি ভাল "জ্ঞাত গাইড" তৈরি করে, যেমন কোনও কিছু সূচনা করার অপেক্ষায় বা অন্য কোনও পরিচিত অবস্থায় রয়েছে বলে ইঙ্গিত দেয়। ব্যক্তিগতভাবে আমি নাল মানটি ব্যবহার করতে পছন্দ করব তবে আমি দেখতে পাচ্ছি যে কারও কারও কারও কারও কাছে "বিশেষ" গাইডের প্রয়োজন হতে পারে এবং অল -0 গাইডটি সম্ভবত ভবিষ্যতের রক্ষণাবেক্ষণকারীদের জন্য কমপক্ষে অবাক হওয়ার মূল নীতিটি লঙ্ঘন করার দিকনির্দেশনা হতে পারে কোডের।
পিটারএল

37

Guid.NewGuid() একটি অ্যালগরিদম ব্যবহার করে একটি নতুন ইউইউডি তৈরি করে যা সংঘর্ষগুলি খুব, খুব অসম্ভবের জন্য তৈরি করা হয়েছে।

new Guid() অল-জিরো এমন একটি ইউইউডি তৈরি করে।

সাধারণত আপনি প্রাক্তনটিকে পছন্দ করবেন, কারণ এটি কোনও ইউইউডির মূল বিষয় (যদি আপনি এটি অন্য কোথাও থেকে গ্রহণ না করেন)।

এমন কেস রয়েছে যেখানে আপনি সত্যই একটি অল-শূন্য ইউআইডি চান, তবে এই ক্ষেত্রে Guid.Emptyবা default(Guid)আপনার অভিপ্রায়টি সম্পর্কে আরও পরিষ্কার, এবং এটির কোনও অনন্য মূল্য তৈরি হওয়ার প্রত্যাশা করে কেউ পড়ার সম্ভাবনা কম less

সব মিলিয়ে new Guid()স্বচ্ছতার এই অভাবে যে দরকারী নয়, কিন্তু এটি একটি মান-টাইপ করে একটি parameterless কন্সট্রাকটর যে আয় একটি সম্পূর্ণ শূন্য-এবং-NULLs মান নেই আছে সম্ভব নয়।

সম্পাদনা: প্রকৃতপক্ষে, কোনও মান ধরণে প্যারামিটারলেস কনস্ট্রাক্টর থাকা সম্ভব যা সমস্ত কিছু শূন্য এবং নালায় সেট করে না, তবে আপনি এটি সি # তে করতে পারবেন না, এবং এটি কখন ডাকা হবে এবং কখন হবে সে সম্পর্কে নিয়ম the বিভ্রান্তিকর হয়ে উঠেছে কেবল একটি অল-জিরো স্ট্রাক্ট হয়ে উঠুন, সুতরাং এটি কোনওভাবেই ভাল ধারণা নয়।


16
আমি এটি মজাদার জন্য যুক্ত করব। সংঘর্ষের 1% সুযোগের জন্য, আপনাকে প্রায় 2,600,000,000,000,000,000 জিইউইডিগুলি তৈরি করতে হবে
ক্লিনটন ওয়ার্ড

8
@ ক্লিন্টন ওয়ার্ড এটি নির্ভর করে যে কোন ইউআইডি অ্যালগরিদমগুলি ব্যবহার করছে, তবে যেহেতু কেউ কেউ ম্যাক্সের মধ্যে সংঘর্ষ এড়াতে ম্যাক ঠিকানা ব্যবহার করে এবং সকলেই একই মেশিনে সংঘর্ষ এড়াতে সময় ফ্যাক্টর ব্যবহার করে, আপনাকে সাধারণ গণিতের চেয়ে আরও বেশি তৈরি করতে হবে পরামর্শ দেবে। আপনি যদি না ইচ্ছাকৃতভাবে সময় পরিবর্তন করে এবং ম্যাকের ঠিকানাগুলিতে গণ্ডগোলের মাধ্যমে অ্যালগরিদমের সাথে স্ক্রু না করেন, তবে এক্ষেত্রে আপনার খুব দ্রুত কোনওটি পাওয়া উচিত - তবে এটি ইচ্ছাকৃতভাবে ইনপুটগুলির সাথে গণ্ডগোল করছে।
জন হানা

2
এটি ভি 1 গাইড ছিল। নতুন এমএস জিইউডিগুলি ভি 4 হয় এবং জিইউইডি প্রজন্মের অংশ হিসাবে ম্যাক ঠিকানা ব্যবহার করে না। সময় এখনও একটি ফ্যাক্টর
ক্লিনটন ওয়ার্ড

16

[আমি বুঝতে পারি এটি একটি পুরানো থ্রেড, কেবল আরও কিছু বিশদ যুক্ত করে] মার্ক এবং জন হানার দুটি উত্তর পার্থক্যগুলি সংক্ষিপ্ত করে, যদিও এটি কিছু আগ্রহী হতে পারে

Guid.NewGuid()

ঘটনাচক্রে CoCreateGuid (Ole32- এ একটি COM কল) কল করে ( এখানে রেফারেন্স ) এবং প্রকৃত কাজটি ইউইডক্রিয়েট দ্বারা সম্পন্ন হয় ।

গাইড.এম্পটি বলতে বোঝায় যে কোনও গাইডে সমস্ত শূন্য রয়েছে কিনা তা পরীক্ষা করতে। নতুন গাইড () এর সাথে প্রশ্নযুক্ত গাইডের মান তুলনা করার মাধ্যমে এটিও করা যেতে পারে

সুতরাং, আপনার যদি কোনও অনন্য সনাক্তকারী প্রয়োজন হয় তবে উত্তরটি হ'ল গাইড N নিউগুইড ()


-2

Guid.NewGuid(), যেমন এটি যেমন জিইউডিগুলি তৈরি করে।

Guid.NewGuid()একটি খালি Guidঅবজেক্ট তৈরি করে, কল করে এটি আরম্ভ করে CoCreateGuidএবং বস্তুকে ফেরত দেয়।

new Guid() কেবল একটি খালি জিইউইডি তৈরি করে (সমস্ত শূন্য, আমি মনে করি)।

আমি অনুমান করি যে তারা কন্সট্রাক্টরকে যেমন প্রকাশ্য করতে হবে Guidতেমন একটি struct


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