গাইড সব 0 এর (শূন্য) হয়?


241

আমি এমন কিছু ডাব্লুসিএফ পরিষেবাদি পরীক্ষা করছি যা গাইডদের সাথে পিছনে পিছনে জিনিস পাঠায়। আমার ওয়েব অ্যাপ্লিকেশন পরীক্ষার কোডগুলিতে, আমি নিম্নলিখিতগুলি করছি:

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = new Guid()
});

কোনও কারণে, নতুন গাইডে () কল কলটি 0-এর (শূন্য) এর মতো নির্দেশিকা তৈরি করছে:

00000000-0000-0000-0000-000000000000

কি এই সৃষ্টি হতে পারে?


9
আপনার সম্পাদনার পরে, এটি সম্পূর্ণ নতুন প্রশ্ন। এবং নতুন উত্তরটি নির্ধারণ করতে আরও অনেক তথ্য প্রয়োজন।
স্কট রিপ্পি

3
প্রশ্নটি পরিবর্তন করে এমন সম্পাদিত অংশ সরিয়ে ফেলল।
ডিডাক্সিস

115
+1 কারণ আমি এই প্রশ্নটি কয়েক ডজন বার ফাঁকা নির্দেশ চুরি করতে ব্যবহার করেছি :)
জেমসম্যান

5
@ জোমোসেসম্যান, ফর্মটি ব্যবহার করা আরও ভালGuid.Empty
জোনাথন মুসেকিয়ান ২

4
@ জোনাথানএম আমি এটি আসলে এসকিউএল স্ক্রিপ্টে ব্যবহার করছি। এই পোস্টটি সন্ধানের পরে প্রথমে প্রদর্শিত হবে।
জেমসম্যান

উত্তর:


428

Guid.NewGuid()ডিফল্ট কনস্ট্রাক্টরকে কল করার পরিবর্তে স্থির পদ্ধতিটি ব্যবহার করুন ।

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = Guid.NewGuid()
});

18
সঠিক উত্তরের জন্য +1 পাশাপাশি সঠিক ডকুমেন্টেশনের লিঙ্ক।
অস্পষ্টররবোট

109

এ থেকে শিখার পাঠ:

1) গাইড একটি মান প্রকার, কোনও রেফারেন্স টাইপ নয়।

2) যে new S()কোনও মান ধরণের ডিফল্ট কনস্ট্রাক্টরকে কল করা সর্বদা আপনাকে সেই মান প্রকারের সমস্ত শূন্য ফর্ম ফিরিয়ে দেয়, তা যাই হোক না কেন। এটি যৌক্তিকভাবে একই default(S)


3
এটি কি একই আইএল হিসাবে default(S)সংকলিত হয় বা আমি যে কোন সূক্ষ্মতা অনুপস্থিত রয়েছি?
কনফিগারকারী

8
@ কনফিগুয়েটর: এটি করে। আসলে, "ডিফল্ট (এস)" এবং "নতুন এস ()" এর সংকলকটির অভ্যন্তরীণ উপস্থাপনা একই; আমরা তাদের অভ্যন্তরীণভাবে পার্থক্য করি না, কারণ তারা না আসলে যা বছরের পর বছর ধরে কিছু দুর্ভাগা বাগ নেতৃত্বাধীন হয়েছে বেশ অভিন্ন। উদাহরণস্বরূপ, const int x = new int();অনুমান অনুযায়ী আইনী বলে মনে করা হয় না, তবে const int x = default(int);হয়; আমরা উভয় অনুমতি।
এরিক লিপার্ট

1
@ কনফিগ্রেটর - যদি আপনি সম্পর্কিত কোণার ক্ষেত্রে আগ্রহী হন তবে সম্ভবত এমএসএমভিপিএস / ব্লগস / জোন_স্কিট / অর্কিভ / ২০০8/12 /10/… আগ্রহী।
কেভিবি

56

পরিবর্তে এটি চেষ্টা করুন:

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = new Guid.NewGuid()
});

এটি একটি 'আসল' গাইডের মান উত্পন্ন করবে। আপনি যখন কোনও রেফারেন্স টাইপ নতুন করেন, এটি আপনাকে ডিফল্ট মান দেয় (যা এই ক্ষেত্রে, কোনও গাইডের জন্য সমস্ত শূন্য)।

আপনি যখন একটি নতুন গাইড তৈরি করবেন, এটি এটিকে সমস্ত শূন্যের সাথে আরম্ভ করবে, যা গাইডের জন্য ডিফল্ট মান। এটি মূলত "নতুন" ইন্ট তৈরির সমান (যা একটি মান ধরণের তবে আপনি এটি যেভাবেই করতে পারেন):

Guid g1;                    // g1 is 00000000-0000-0000-0000-000000000000
Guid g2 = new Guid();       // g2 is 00000000-0000-0000-0000-000000000000
Guid g3 = default(Guid);    // g3 is 00000000-0000-0000-0000-000000000000
Guid g4 = Guid.NewGuid();   // g4 is not all zeroes

এটির সাথে একই জিনিস করার সাথে তুলনা করুন:

int i1;                     // i1 is 0
int i2 = new int();         // i2 is 0
int i3 = default(int);      // i3 is 0

1
g1কেবল স্থানীয় ক্ষেত্র হিসাবে নয় ক্ষেত্র হিসাবে সংকলন করবে। এছাড়াও আপনার মন্তব্য কলামের সূচকগুলি কোডের একই লাইনের সাথে মেলে না
কোডসইনচাউস

1
@ কোডইনচাউস: ধন্যবাদ, মন্তব্যগুলি স্থির করেছেন। এফওয়াইআই,
জি

3
এটি যেমন আছে তেমন সংকলন করবে তবে এর কোনও নির্ধারিত মান নেই। যদি আপনি যে কোডটি পড়ে এটি যুক্ত করেন (এটি লেখার আগে) এটি আর সংকলন করবে না।
কোডসইনচাওস

1
ডান, ভাল পয়েন্ট, আপনি যদি একটি অস্বীকৃত ভেরিয়েবল ব্যবহার করেন আপনি একটি ত্রুটি পাবেন, সুতরাং মানটি ব্যবহার করা যাবে না।
জনড

1
ডাউন-ভোট হয়েছে কারণ "গাইড = গাইড। নিউগুইড ();" নতুন বিকাশকারীদের বিভ্রান্ত করতে পারে। "গাইড কিছুগুইড = গাইড" নিউগুইড (); এর মতো কিছুতে সম্পাদনা বিবেচনা করুন; জি 2 লাইনের মতো;)
ডেভিডসোডিট



11

সম্পূর্ণ হওয়ার চেতনায়, যে উত্তরগুলি আপনাকে ব্যবহার Guid.NewGuid()করতে নির্দেশ দেয় তা সঠিক।

আপনার পরবর্তী সম্পাদনা সম্বোধন করার সময়, আপনাকে আপনার RequestObjectশ্রেণীর জন্য কোড পোস্ট করতে হবে । আমি সন্দেহ করছি যে আপনার গাইড সম্পত্তিটি একটি হিসাবে চিহ্নিত নেই DataMember, এবং এভাবে তারের উপর দিয়ে সিরিয়াল করা হচ্ছে না। যেহেতু (যেমন সকলের মত ) default(Guid)একই , তাই এটি আপনি যে আচরণটি দেখছেন তা ব্যাখ্যা করবে।new Guid()0

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