অপারেটর হিসাবে বনাম সরাসরি ingালাই?


709

নিম্নলিখিত কোড বিবেচনা করুন:

void Handler(object o, EventArgs e)
{
   // I swear o is a string
   string s = (string)o; // 1
   //-OR-
   string s = o as string; // 2
   // -OR-
   string s = o.ToString(); // 3
}

তিন ধরণের ingালাইয়ের মধ্যে পার্থক্য কী (ঠিক আছে, তৃতীয়টি কোনও castালাই নয়, তবে আপনি অভিপ্রায় পান)। কোনটি পছন্দ করা উচিত?


1
বেশ সদৃশ নয়, তবে পূর্ববর্তী প্রশ্নে কিছু কার্যকারিতা আলোচনাও রয়েছে ।

8
4 র্থ: string s = Convert.ToString(o); 5 তম: string s = $"{o}"(অথবা string.Formatপূর্ববর্তী সি # এর সমতুল্য ফর্ম)
আর্থ ইঞ্জিন

উত্তর:


833
string s = (string)o; // 1

ছোঁড়ার InvalidCastException যদি oএকটি নয় string। অন্যথায়, নির্ধারণ oকরার s, এমনকি যদি oহয় null

string s = o as string; // 2

নির্ধারণ nullকরতে sযদি oএকটি নয় stringঅথবা যদি oহয় null। এই কারণে, আপনি এটি মান ধরণের সাথে ব্যবহার করতে পারবেন না (অপারেটর nullসেই ক্ষেত্রে আর ফিরে আসতে পারে না )। অন্যথায়, নির্ধারণ oকরতে s

string s = o.ToString(); // 3

যদি হয় তবে একটি নাল রেফারেন্সইগ্রহের কারণ oহয় null। নির্ধারণ যাই হোক না কেন o.ToString()রিটার্ন s, সেটা ব্যাপার কি ধরনের oহয়।


বেশিরভাগ রূপান্তরগুলির জন্য 1 ব্যবহার করুন - এটি সহজ এবং সোজা। আমি প্রায় 2 কখনই ব্যবহার করি না কারণ যেহেতু যদি কিছু সঠিক ধরণের না হয় তবে আমি সাধারণত একটি ব্যতিক্রম হওয়ার প্রত্যাশা করি। আমি কেবল খারাপভাবে ডিজাইন করা লাইব্রেরিগুলির সাথে এই রিটার্ন-নাল প্রকারের কার্যকারিতাটির প্রয়োজন দেখেছি যা ত্রুটি কোডগুলি ব্যবহার করে (যেমন ব্যতিক্রমগুলি ব্যবহারের পরিবর্তে নাল = ত্রুটি রিটার্ন করুন)।

3 কোনও castালাই নয় এবং এটি কেবল একটি পদ্ধতির প্রার্থনা। আপনার যখন স্ট্রিং-বিহীন বস্তুর প্রতিনিধিত্ব প্রয়োজন তখন এটি ব্যবহার করুন need


2
আপনি স্পষ্টভাবে সংজ্ঞায়িত করার সময় মান-প্রকারগুলিতে 'নাল' বরাদ্দ করতে পারেন, যেমন: int? আমি; স্ট্রিং s = "5"; i = s int হিসাবে; // আমি এখন 5 এস = নাল; i = s int হিসাবে; // আমি এখন নাল
আনহলেদির

3
RE: আনহলেদির আসলে প্রথম কলের পরে আমি নালু হয়ে যাব। স্ট্রিংয়ের মান পেতে আপনাকে একটি সুস্পষ্ট রূপান্তর ফাংশন ব্যবহার করতে হবে।
গুভান্তে

45
রি: স্যান্ডার প্রকৃতপক্ষে আর একটি খুব ভাল কারণ ব্যবহার করার কারণ রয়েছে, এটি আপনার চেকিং কোডটি সহজ করে দেয় (নাল পরীক্ষা করুন তারপরে নাল এবং সঠিক ধরণের জন্য পরীক্ষা করুন) এটি সময় ব্যয় করার পরে আপনি একটি কাস্টমকে ব্যতিক্রম করতে পারেন। তবে এটি খুব সত্য যে কল হিসাবে খারাপ অন্ধ।
গুভান্তে

5
# 2 সমান পদ্ধতিগুলির মতো জিনিসগুলির জন্য কার্যকর যেখানে আপনি ইনপুট টাইপটি জানেন না G সাধারণভাবে যদিও, হ্যাঁ, 1 টি পছন্দ করা হবে। যদিও এর চেয়ে বেশি পছন্দ করা হয়েছে স্পষ্টতই টাইপ সিস্টেমটি কেবল এক প্রকারের মধ্যে সীমাবদ্ধ রাখতে ব্যবহার করা হবে যখন আপনি কেবল একটি প্রত্যাশা করেন :)
Calum

6
# 2 এছাড়াও কার্যকর যখন আপনার কোড রয়েছে যা বিশেষায়িত ধরণের জন্য নির্দিষ্ট কিছু করতে পারে তবে অন্যথায় কিছুই করবে না।
অ্যান্থনিডব্লু জোন্স

349
  1. string s = (string)o;কিছু যখন অবশ্যই অন্য জিনিস হওয়া উচিত তখন ব্যবহার করুন ।
  2. string s = o as string;যখন অন্য জিনিস হতে পারে তখন ব্যবহার করুন ।
  3. string s = o.ToString(); এটি কী তা আপনি যখন খেয়াল করেন না তখন ব্যবহার করুন তবে আপনি কেবল উপলব্ধ স্ট্রিং প্রতিনিধিত্ব ব্যবহার করতে চান।

1
আমি এই ধারণাটি ভাল বলে মনে করি তবে এটি সঠিক নাও হতে পারে।
j রিভ

1
আমি প্রথম দুটি পছন্দ করি তবে তৃতীয় বিকল্পটিতে আমি "এবং আপনি নিশ্চিত যে এটি নাল নয়" যুক্ত করব।
অক্সনিথ

2
আপনি আজকাল এলভিস (?।) এর যত্ন নেওয়া এড়াতে ব্যবহার করতে পারেন: আপত্তি?। টোস্ট্রিং ()
কুইবলসোম

@ কিউবিলসোম - দুর্দান্ত উত্তর তবে আপনার বিদ্রোহটি নিয়ে ভাবতে হবে আমাকে! এটি আক্ষরিকভাবে আমার মনকে ফুটিয়ে তুলেছে যে ভাষাটি প্রায় 15 বছর ধরে চলছে। গতকালের মতো মনে হচ্ছে যখন আমরা সকলেই সিনিয়র ডেভসকে সি # তে স্যুইচ করার জন্য বোঝানোর চেষ্টা করছিলাম।
গ্রিসওয়াল্ড_911

1
@ চতুর সুন্দর উত্তর: আমি যদি 1/2/3 এর মধ্যে যোগ করি তবে আপনি ওকে বিরক্ত করবেন যাতে ওপি পর্যন্ত স্ক্রোল করা প্রয়োজন হয় না। আমি ভোট দিয়ে পুরানো উত্তর র‌্যাঙ্ক করব!
কেন

29

এটি সত্যই নির্ভর করে যে আপনি জানেন যে oস্ট্রিং কিনা এবং আপনি এটি দিয়ে কী করতে চান। আপনার মন্তব্যটির অর্থ যদি oসত্যই সত্যই একটি স্ট্রিং থাকে তবে আমি সরল (string)oনিক্ষেপ পছন্দ করব - এটি ব্যর্থ হওয়ার সম্ভাবনা নেই।

স্ট্রেড কাস্ট ব্যবহারের সবচেয়ে বড় সুবিধা হ'ল এটি যখন ব্যর্থ হয় তখন আপনি একটি অবৈধ কাস্টেক্সেপশন পান , যা আপনাকে কী ভুল হয়েছে তা বেশ কিছু বলে।

সঙ্গে asঅপারেটর, যদি oএকটি স্ট্রিং নয়, sসেট করা হয় null, যা কুশলী হলে আপনি নিশ্চিত না এবং পরীক্ষা করতে চান s:

string s = o as string;
if ( s == null )
{
    // well that's not good!
    gotoPlanB();
}

তবে, আপনি যদি এই পরীক্ষাটি না করেন, আপনি sপরে ব্যবহার করবেন এবং একটি নালরফেরান এক্সেক্সেশন নিক্ষেপ করবেন। এই বেশি প্রচলিত এবং হতে থাকে অনেক কঠিন ট্র্যাক নিচে একবার তারা বন্য আউট ঘটে, প্রায় প্রত্যেক লাইন একটি পরিবর্তনশীল dereferences এবং এক নিক্ষেপ করতে পারে। অন্যদিকে, আপনি (যেমন কোন আদিম, অথবা structs একটি মান টাইপ কাস্ট করতে চেষ্টা করছেন যদি তারিখসময় -), আপনি সোজা ঢালাই ব্যবহার করতে হবে asনা হবে।

স্ট্রিংয়ে রূপান্তর করার বিশেষ ক্ষেত্রে, প্রতিটি বস্তুর একটি থাকে ToString, তাই আপনার তৃতীয় পদ্ধতিটি oবাতিল না হলে ঠিক থাকতে পারে এবং আপনি মনে করেন যে ToStringপদ্ধতিটি আপনি যা চান তা করতে পারে।


2
এক নোট - আপনি ব্যবহার করতে পারেন asসঙ্গে nullable মান ধরনের। আইই o as DateTimeকাজ করবে না, তবে o as DateTime?করবে ...
জন গিব

if (s is string)পরিবর্তে ব্যবহার করছেন না কেন ?
বর্নটোকোড

1
@ বার্নটোকোড, আমার জন্য মূলত ব্যক্তিগত পছন্দ। আপনি যা করছেন তার উপর নির্ভর করে প্রায়শই isআইএনਗ করার পরে , আপনাকে আবার কোনওভাবে কাস্ট করতে হবে, যাতে আপনার এটি হয় এবং তারপরে একটি হার্ড কাস্ট। কিছু কারণে, asনাল এবং চেকটি আমার কাছে ভাল লাগছিল।
ব্লেয়ার কনরাড

9

এটি কী প্রকারে প্রেরণ করতে পারে তা আপনি যদি ইতিমধ্যে জানেন তবে একটি সি-স্টাইলের কাস্ট ব্যবহার করুন:

var o = (string) iKnowThisIsAString; 

মনে রাখবেন যে কেবলমাত্র একটি সি-স্টাইলের কাস্ট দিয়ে আপনি সুস্পষ্ট ধরণের জবরদস্তি সম্পাদন করতে পারেন।

এটি পছন্দসই ধরণের কিনা তা আপনি যদি না জানেন এবং আপনি এটি ব্যবহার করে যাচ্ছেন তবে কীওয়ার্ড হিসাবে ব্যবহার করুন :

var s = o as string;
if (s != null) return s.Replace("_","-");

//or for early return:
if (s==null) return;

লক্ষ্য করুন যেমন কোন প্রকার রূপান্তর অপারেটার কল করা হবে না। এটি কেবল অ-নাল হবে যদি অবজেক্টটি নির্দিষ্ট ধরণের নাল এবং স্থানীয়ভাবে না থাকে।

স্ট্রিংতে কাস্ট করতে না পারলেও যে কোনও বস্তুর মানব-পঠনযোগ্য স্ট্রিং উপস্থাপনা পেতে ToString () ব্যবহার করুন।


3
টাইপ রূপান্তর অপারেটর সম্পর্কিত এটি একটি আকর্ষণীয় ছোট্ট গ্যাচা। আমার কয়েকটি ধরণের আছে যেগুলির জন্য আমি রূপান্তর তৈরি করেছি, অবশ্যই এটির জন্য অবশ্যই নজর রাখা উচিত।
অ্যান্থনিডাব্লু জোন্স

7

যখন আপনি FindControl পদ্ধতি ব্যবহার করেন তখন মূল শব্দটি Asp.net এ ভাল।

Hyperlink link = this.FindControl("linkid") as Hyperlink;
if (link != null)
{
     ...
}

এর অর্থ আপনি টাইপড ভেরিয়েবলের উপর পরিচালনা করতে পারেন তারপরে objectসরাসরি কাস্টের মতো আপনার পছন্দ থেকে এটি ফেলে দিতে হবে :

object linkObj = this.FindControl("linkid");
if (link != null)
{
     Hyperlink link = (Hyperlink)linkObj;
}

এটি কোনও বিশাল জিনিস নয়, তবে এটি কোড এবং ভেরিয়েবল অ্যাসাইনমেন্টের লাইনগুলি সংরক্ষণ করে, এবং আরও পাঠযোগ্য


6

'as' এর উপর ভিত্তি করে 'হ'ল', যা এমন একটি কীওয়ার্ড যা বস্তুটি বহুগঠিতভাবে সামঞ্জস্যপূর্ণ (মূলত কোনও কাস্ট তৈরি করা যায়) যদি রানটাইমের সময় পরীক্ষা করে এবং চেকটি ব্যর্থ হয় তবে নাল ফেরায়।

এই দুটি সমতুল্য:

'হিসাবে' ব্যবহার:

string s = o as string;

'Is' ব্যবহার করে:

if(o is string) 
    s = o;
else
    s = null;

বিপরীতে, সি-স্টাইলের castালাই রানটাইমের সময়ও তৈরি করা হয় তবে কাস্টটি তৈরি করা না গেলে ব্যতিক্রম ছুঁড়ে ফেলে।

কেবল একটি গুরুত্বপূর্ণ তথ্য যুক্ত করতে:

'হিসাবে' কীওয়ার্ডটি কেবল রেফারেন্স ধরণের সাথে কাজ করে। আপনি করতে পারবেন না:

// I swear i is an int
int number = i as int;

এই ক্ষেত্রে আপনাকে ingালাই ব্যবহার করতে হবে।


আমার ভুল দেখানোর জন্য ধন্যবাদ, আপনি ঠিক বলেছেন। আমি উত্তর সম্পাদনা করেছি। ওহো দুঃখিত.
সার্জিও আকোস্টা

5

2 উদ্ভূত প্রকারে কাস্টিংয়ের জন্য দরকারী।

ধরা যাক একটি প্রাণী:

b = a as Badger;
c = a as Cow;

if (b != null)
   b.EatSnails();
else if (c != null)
   c.EatGrass();

হবে একটি কাস্ট একটি সর্বনিম্ন সঙ্গে খাওয়ানো।


2
@ চিয়ারস মৌত্রয়, এটি সর্বদা সম্ভব হয় না, বিশেষত যদি এটি একটি গ্রন্থাগার হয়।
deceleratedcaviar

5

এই পৃষ্ঠায় চালিত পরীক্ষাগুলি অনুসারে: http://www.dotnetguru2.org/sebastienros/index.php/2006/02/24/cast_vs_as

(কখনও কখনও এই পৃষ্ঠায় কিছু "অবৈধ রেফারার" ত্রুটি দেখা দেয়, তাই যদি তা হয় তবে কেবল রিফ্রেশ করুন)

উপসংহারটি হল, "হিসাবে" অপারেটর সাধারণত কাস্টের চেয়ে দ্রুত হয়। কখনও কখনও বহুগুণ দ্রুত, কখনও কখনও সবেমাত্র দ্রুত।

আমি পার্সোনোনালি জিনিস "হিসাবে" আরও পাঠযোগ্য।

সুতরাং, যেহেতু এটি উভয়ই দ্রুত এবং "নিরাপদ" (অবিচ্ছিন্ন নিক্ষেপ ব্যতিক্রম) এবং সম্ভবত পড়া সহজ, তাই আমি সর্বদা "হিসাবে" ব্যবহার করার পরামর্শ দিই।


4

"(স্ট্রিং) ও" এর ফলে কোনও সরাসরি কাস্ট না থাকায় একটি অকার্যকরপর্বরূপ ধারণার ফলাফল হবে।

"o স্ট্রিং হিসাবে" এর ফলে একটি ব্যতিক্রম ছোঁড়ার পরিবর্তে নাল রেফারেন্স হয়ে উঠবে।

"o.ToString ()" কোনও সেটের জন্য কোনও প্রকারের কাস্ট নয়, এটি এমন একটি পদ্ধতি যা বস্তু দ্বারা প্রয়োগ করা হয়, এবং এভাবে একরকম বা অন্যভাবে। নেট এর প্রতিটি শ্রেণীর দ্বারা "কিছু করে" উদাহরণস্বরূপ যে শ্রেণিতে এটি বলা হয় এবং একটি স্ট্রিং দেয়।

ভুলে যাবেন না যে স্ট্রিংয়ে রূপান্তর করার জন্য, কনভার্টও রয়েছে o টোস্ট্রিং (কিছু টাইপ উদাহরণ অফফ্যাটটাইপ) যেখানে কিছু টাইপ মূলত ফ্রেমওয়ার্ক বেস টাইপের একটি সেট is


3

প্রদত্ত সমস্ত উত্তরগুলি ভাল, যদি আমি কিছু যুক্ত করতে পারি: স্ট্রিংয়ের পদ্ধতি এবং বৈশিষ্ট্যগুলি সরাসরি ব্যবহার করতে (যেমন ToLower) আপনি লিখতে পারবেন না:

(string)o.ToLower(); // won't compile

আপনি কেবল লিখতে পারেন:

((string)o).ToLower();

তবে আপনি পরিবর্তে লিখতে পারেন:

(o as string).ToLower();

asবিকল্প (অন্তত আমার মতে পর্যন্ত) আরো পাঠযোগ্য।


(ও স্ট্রিং হিসাবে) .আপনি হিসাবে অপারেটর উদ্দেশ্য হ্রাস। যখন স্ট্রিংয়ে কাস্ট করা যাবে না তখন এটি নাল রেফারেন্স ব্যতিক্রম ছুঁড়ে দেবে।
জেমস

@ জেমস - তবে কে বলেছিলেন যে অপারেটর হিসাবে একমাত্র উদ্দেশ্য কাস্ট ব্যর্থ হলে ব্যতিক্রম ছোঁড়া? যদি আপনি জানেন যে ও একটি স্ট্রিং এবং কেবল ক্লিনার কোড লিখতে চান তবে আপনি (o as string).ToLower()একাধিক বিভ্রান্তিকর বন্ধনীর পরিবর্তে ব্যবহার করতে পারেন ।
বোর্নটোকোড

যেমনটির উদ্দেশ্যটি সম্পূর্ণ বিপরীত - কাস্ট ব্যর্থ হলে এটি ব্যতিক্রম ছোঁড়া উচিত নয়, এটি শূন্য হওয়া উচিত। ধরা যাক আপনার ও নাল মান সহ একটি স্ট্রিং, তারপরে কী হবে? ইঙ্গিত - আপনার টোলওয়ার কল ব্যর্থ হবে।
জেমস

@ জেমস - আপনি ঠিক বলেছেন, তবে যে ক্ষেত্রে আমি নিশ্চিতভাবে জানি যে এটি শূন্য হবে না এবং সেই বিষয়টির পদ্ধতিগুলি অ্যাক্সেস করতে আমাকে কেবল সংকলকটির জন্য কাস্টিং করা দরকার?
জন্মদিন টোকোড

1
আপনি অবশ্যই এটি করতে পারেন তবে এটি হুবহু অনুশীলন নয় কারণ আপনি আপনার মূল্য নাল নয় তা নিশ্চিত করার জন্য কলার বা বাহ্যিক সিস্টেমে নির্ভর করতে চান না। আপনি যদি সি # 6 ব্যবহার করছেন তবে আপনি (স্ট্রিং হিসাবে) করতে পারেন? ToLower ()।
জেমস

3
string s = o as string; // 2

পছন্দসই, কারণ এটি ডাবল কাস্টিংয়ের পারফরম্যান্স পেনাল্টি এড়িয়ে চলে।


হাই ক্রিস, এই উত্তরের লিঙ্কটি এখন একটি 404 ... আমি নিশ্চিত না যে আপনি এটির জায়গায় রাখতে চান এমন প্রতিস্থাপন পেয়েছেন কিনা?
ম্যাট

3

দেখে মনে হচ্ছে এগুলির দুটি ধারণাগতভাবে পৃথক।

সরাসরি কাস্টিং

প্রকারের কঠোরভাবে সম্পর্কিত হতে হবে না। এটি সব ধরণের স্বাদে আসে।

  • কাস্টম অন্তর্নিহিত / সুস্পষ্ট কাস্টিং: সাধারণত একটি নতুন অবজেক্ট তৈরি হয়।
  • মান প্রকারের অন্তর্নিহিত: তথ্য না হারিয়ে অনুলিপি করুন।
  • মান প্রকার স্পষ্ট: অনুলিপি এবং তথ্য হারিয়ে যেতে পারে।
  • IS-A সম্পর্ক: রেফারেন্সের ধরণ পরিবর্তন করুন, অন্যথায় ব্যতিক্রম ছোঁড়ে।
  • একই ধরণের: 'Castালাই অনর্থক'।

মনে হচ্ছে অবজেক্টটি অন্য কিছুতে রূপান্তরিত হতে চলেছে।

এএস অপারেটর

প্রকারের প্রত্যক্ষ সম্পর্ক রয়েছে। যেমন:

  • রেফারেন্সের প্রকারগুলি: আইএস-এ সম্পর্ক অবজেক্টগুলি সর্বদা একই থাকে, কেবল রেফারেন্স পরিবর্তন হয়।
  • মানের প্রকারগুলি: বক্সিং এবং নালার ধরণের কপি করুন

মনে হচ্ছে আপনি অন্যভাবে কোনও জিনিসটি পরিচালনা করছেন।

নমুনা এবং আইএল

    class TypeA
    {
        public int value;
    }

    class TypeB
    {
        public int number;

        public static explicit operator TypeB(TypeA v)
        {
            return new TypeB() { number = v.value };
        }
    }

    class TypeC : TypeB { }
    interface IFoo { }
    class TypeD : TypeA, IFoo { }

    void Run()
    {
        TypeA customTypeA = new TypeD() { value = 10 };
        long longValue = long.MaxValue;
        int intValue = int.MaxValue;

        // Casting 
        TypeB typeB = (TypeB)customTypeA; // custom explicit casting -- IL:  call class ConsoleApp1.Program/TypeB ConsoleApp1.Program/TypeB::op_Explicit(class ConsoleApp1.Program/TypeA)
        IFoo foo = (IFoo)customTypeA; // is-a reference -- IL: castclass  ConsoleApp1.Program/IFoo

        int loseValue = (int)longValue; // explicit -- IL: conv.i4
        long dontLose = intValue; // implict -- IL: conv.i8

        // AS 
        int? wraps = intValue as int?; // nullable wrapper -- IL:  call instance void valuetype [System.Runtime]System.Nullable`1<int32>::.ctor(!0)
        object o1 = intValue as object; // box -- IL: box [System.Runtime]System.Int32
        TypeD d1 = customTypeA as TypeD; // reference conversion -- IL: isinst ConsoleApp1.Program/TypeD
        IFoo f1 = customTypeA as IFoo; // reference conversion -- IL: isinst ConsoleApp1.Program/IFoo

        //TypeC d = customTypeA as TypeC; // wouldn't compile
    }

2

অপারেটর হিসাবে আমি নিম্নলিখিত বৈশিষ্ট্যগুলিতে মনোযোগ আকর্ষণ করতে চাই :

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as

নোট করুন যে অপারেটর হিসাবে কেবলমাত্র রেফারেন্স রূপান্তর, নালযোগ্য রূপান্তর এবং বক্সিং রূপান্তরগুলি সম্পাদন করে। অপারেটর হিসাবে অন্যান্য রূপান্তরগুলি যেমন ব্যবহারকারীর দ্বারা সংজ্ঞায়িত রূপান্তরগুলি সম্পাদন করতে পারে না, যা পরিবর্তে কাস্ট এক্সপ্রেশন ব্যবহার করে সম্পাদন করা উচিত।


0

সম্ভাব্যভাবে শূন্য হতে পারে এমন কোনও কিছু (যে কোনও ধরণের) এর স্ট্রিং প্রতিনিধিত্ব করার চেষ্টা করার সময়, আমি নীচের কোডের লাইনটি পছন্দ করি। এটি কমপ্যাক্ট, এটি টোস্ট্রিং () কে আহ্বান করে এবং এটি সঠিকভাবে নালগুলি পরিচালনা করে। যদি ওটি নাল হয় তবে এর মধ্যে স্ট্রিং রয়েছে mp

String s = String.Concat(o);

0

যেহেতু কেউ এটি উল্লেখ করেনি, জাওয়ার কাছে কীওয়ার্ড দ্বারা সবচেয়ে কাছের এটি হ'ল:

obj.GetType().IsInstanceOfType(otherObj)

0

string s = (string) o;যদি আপনার অ্যাপ্লিকেশনটির যৌক্তিক প্রসঙ্গে stringএকমাত্র বৈধ প্রকার হয় তবে সরাসরি কাস্ট ব্যবহার করুন । এই পদ্ধতির সাহায্যে আপনি ব্যর্থ-InvalidCastException নীতিটি পেয়ে যাবেন এবং বাস্তবায়ন করবেন । আপনার যুক্তিটি অবৈধ প্রকারটি আরও পাস করা থেকে সুরক্ষিত হবে বা অপারেটর ব্যবহার করা হলে নুলারফেরান এক্সসেপশন পাবেন ।as

যদি যুক্তিটি বিভিন্ন ধরণের বিভিন্ন castালাই আশা করে string s = o as string;এবং এটি পরীক্ষা করে দেখুন nullবা isঅপারেটরটি ব্যবহার করেন ।

কাস্ট সহজতর করতে নতুন শীতল বৈশিষ্ট্য সি # 7.0 এ উপস্থিত হয়েছে এবং এটি একটি প্যাটার্ন ম্যাচিং চেক করুন :

if(o is string s)
{
  // Use string variable s
}

or

switch (o)
{
  case int i:
     // Use int variable i
     break;
  case string s:
     // Use string variable s
     break;
 }

0

নিম্নলিখিত দুটি ধরণের রূপান্তর (ingালাই) সি # তে সমর্থিত:

|

(সিভি

Given প্রদত্ত অভিব্যক্তিগুলিতে স্থির প্রকারের v এর রূপান্তর করুন

• কেবল তখনই সম্ভব যদি ডায়নামিক ধরণের ভি সি হয়, বা গ এর একটি উপ টাইপ

Not যদি তা না হয় তবে একটি অবৈধ কাস্টেক্সেক্সপশন নিক্ষেপ করা হয়

|

v হিসাবে সি

C (সি) ভি এর অ-মারাত্মক বৈকল্পিক

• এইভাবে, প্রদত্ত অভিব্যক্তিতে স্থির প্রকারের v কে সি তে রূপান্তর করুন

Dyn গতিশীল প্রকারের ভি সি না হলে, অথবা গ এর একটি উপ-টাইপ নাল দেয়

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