আমার কীভাবে ভিবি.এনইটি-তে কাস্ট করা উচিত?


151

এই সব কি সমান? আমি কোন পরিস্থিতিতে অন্যের চেয়ে প্রত্যেককে বেছে নিতে পারি?

  • var.ToString ()

  • CStr (Var)

  • সিটি টাইপ (ভ্যার, স্ট্রিং)

  • ডাইরেক্টকাস্ট (বিভিন্ন, স্ট্রিং)


সম্পাদনা: নটমাইফেল্ফ থেকে পরামর্শ …

  • ট্রাইকাস্ট (ভ্যার, স্ট্রিং)

উত্তর:


156

এগুলি কিছুটা পৃথক এবং সাধারণত একটি গ্রহণযোগ্য ব্যবহার থাকে।

  • var.ToString()আপনাকে কোনও বস্তুর স্ট্রিং প্রতিনিধিত্ব করতে চলেছে, এটি যে ধরণের তা নির্বিশেষে। যদি varইতিমধ্যে স্ট্রিং না হয় তবে এটি ব্যবহার করুন ।
  • CStr(var)ভিবি স্ট্রিং কাস্ট অপারেটর। আমি কোনও ভিবি লোক নই, তাই আমি এড়িয়ে চলার পরামর্শ দেব তবে এটি আসলে কোনও ক্ষতি করতে পারে না। আমি মনে করি এটি মূলত একই রকম CType
  • CType(var, String) প্রদত্ত প্রকারটিকে কোনও স্ট্রিংয়ে রূপান্তর করবে, যে কোনও সরবরাহকৃত রূপান্তরকারী অপারেটর ব্যবহার করে।
  • DirectCast(var, String)স্ট্রিংয়ে কোনও অবজেক্ট আপ-কাস্ট করতে ব্যবহৃত হয়। যদি আপনি জানেন যে কোনও অবজেক্ট ভেরিয়েবল আসলে, একটি স্ট্রিং, এটি ব্যবহার করুন। এটি (string)varসি # তে সমান ।
  • TryCast(@ নোটমাইলে নিজে যেমন উল্লেখ করেছেন ) এর মত DirectCast, তবে Nothingপরিবর্তনটি ব্যতিক্রম না ছড়ানোর পরিবর্তে স্ট্রিংয়ে রূপান্তরিত করা না গেলে এটি ফিরে আসবে । এটি var as stringসি # তে সমান । TryCastদুটিই MSDN পৃষ্ঠার খুব ভাল তুলনা রয়েছে।

15
সিএসটিআর (ভ্যার) এর পরিবর্তে সিটি টাইপ (ভার, স্ট্রিং) ব্যবহার করার কোনও কারণ নেই, তারা ঠিক একই জিনিসটি করে।
জোনাথন অ্যালেন

2
@Maslow TryCastশুধুমাত্র মান ধরনের জন্য কাজ করে যেহেতু এটি একটি টাইপ থাকতে পারে যে করা প্রয়োজন Nothingএকটি মান যেমন
bdukes

1
@ মার্টিনহো এর মধ্যে বলা উচিত "কেবলমাত্র রেফারেন্স টাইপের জন্য কাজ করে "
বিডুকস

3
CStr(var)ভ্যারটি DBNull.Value হলে গলা টিপে এবং ব্যতিক্রম বাড়িয়ে তুলবে, তবে বিকল্পটি Convert.ToString(var)খালি স্ট্রিংটি ফিরিয়ে দেবে।
এমকিটেল

Dim myList AS ArrayList=new ArrayListআপনি যখন লিখুন (From e In myList select CType(e.Name,String)).ToArray()এটি কাজ করে না। আমি লিখতে এসেছি ... select CType(e.Name.ToString,String)).ToArray()এবং আমি আমার হাসি পুনরুদ্ধার করেছি।
বেলাশ

13

Cstr() আরও ভাল পারফরম্যান্সের জন্য ইনলাইন সংকলিত হয়।

CType কোনও রূপান্তর অপারেটর সংজ্ঞায়িত হলে প্রকারের মধ্যে কাস্টের অনুমতি দেয়

ToString() বেস টাইপ এবং স্ট্রিংয়ের মধ্যে রূপান্তর সম্ভব না হলে ব্যতিক্রম ছুঁড়ে দেয়।

TryParse()স্ট্রিং থেকে বেস পর্যন্ত typeifসম্ভব অন্যথায় মিথ্যা ফিরিয়ে দেয়

DirectCastপ্রকারগুলি যদি উত্তরাধিকারের মাধ্যমে সম্পর্কিত হয় বা একটি সাধারণ ইন্টারফেস ভাগ করে নেওয়া হয় তবে theালাই সম্ভব না হলে একটি ব্যতিক্রম ছুঁড়ে trycastমারবে , উদাহরণস্বরূপ কিছুই ফিরিয়ে দেবে না


8

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

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

একটা জিনিস যা আমি কাঁপতে পারি না তা হ'ল আমি সিএসটিআরের পরিবর্তে টসস্ট্রিং ব্যবহার করার ঝোঁক দিচ্ছি তবে অনুমান করা যায় যে সিএসটি দ্রুত।


8

আমি নিম্নলিখিত বাক্য গঠন পছন্দ:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

হাহ আপনি বলতে পারেন আমি সাধারণত সি # তে কোড লিখি। 8)

আমি ট্রাই কাস্টকে বেশি পছন্দ করি কারণ আপনার কাস্টিং ব্যতিক্রমগুলির ওভারহেডের সাথে গোলযোগ নেই। আপনার কাস্ট হয় সফল হয় বা আপনার পরিবর্তনশীল শূন্য থেকে আরম্ভ করা হয় এবং আপনি সেই অনুযায়ী লেনদেন করেন।


2
আমি মনে করি আপনি ভুল ট্রাই কাস্ট ব্যবহার করা মোটেও ভাল ধারণা নয়। আপনার মতো একটি ক্ষেত্রে, সংখ্যা। টুস্ট্রিং () বা সিএসটিআর (নম্বর) ব্যবহার করা উচিত।
শিমি ওয়েইজহ্যান্ডলার

4
@ শিম্মি: ট্রাইকাস্ট একেবারেই ব্যবহার না করার পেছনের কারণ কী? নির্দিষ্ট পরিস্থিতিতে কোনও ব্যতিক্রম এড়াতে ডাইরেক্টকাস্ট করা কি ভাল নয়?
ডিনিক

3
@ ডিনিক্স এবং নট মাইসেল্ফ ট্রাইকাস্ট কেবলমাত্র রেফারেন্স ধরণের জন্য। এখানে, আমাদের একটি পূর্ণসংখ্যা রয়েছে যা একটি ভ্যালু টাইপ। সংকলক ট্রাইকাস্টকে প্রত্যাখ্যান করবে। এছাড়াও, গোলটি একটি স্ট্রিং। কিছুই .ToString()। নেট সত্তা কিছুই সমর্থন করে না । একটি মান ধরণের, যেমন পূর্ণসংখ্যা, কিছুই হতে পারে না। সুতরাং এক্ষেত্রে সিএসটিআর (নম্বর) বা সংখ্যা। সাধারণ ক্ষেত্রে (কেবলমাত্র মান ধরণের নয়), সিএসটিআর (যাই হোক না কেন) নিরাপদ, কারণ এটি কিছুই হ্যান্ডেল করতে পারে - ফলাফলটি স্ট্রিং ভেরিয়েবলের কিছুই হবে না। ট্রাইকাস্ট খুব দরকারী - কেবল এখানে নয়।
স্টেভ

4

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

... যদি প্রশ্নটি উল্লেখ না করে থাকে Stringএবং ToStringআমার অভিযোগ প্রযোজ্য না। আপনি সাধারণ কনভার্সন থেকে বিষয়টিকে সংকীর্ণ না করা পর্যন্ত আপনার ডিরেক্টকাস্টের পক্ষে উকিল করা উচিত নয়।
স্টেভ

1

শংসাপত্র পরীক্ষা অনুযায়ী আপনার সাধারণ রূপান্তরগুলির জন্য যখনই সম্ভব কনভার্ট.টক্সএক্সএক্সএক্স () ব্যবহার করা উচিত কারণ এটি সিএক্সএক্সএক্স রূপান্তরগুলির চেয়ে পারফরম্যান্সকে আরও অনুকূল করে তোলে।


1
এফওয়াইআই, মাইক্রোসফ্টের পল ভিকের মতে, সিএক্সএক্সএক্স অপারেটররা কমপক্ষে ২০০৪ সালে কনভার্ট.টক্সএক্সএক্সএক্সএক্স ফাংশনগুলির চেয়ে দ্রুত ছিল, কারণ ফাংশন কল করার পরিবর্তে সিএক্সএক্সএক্স সরাসরি আইএল-তে সংকলন করে। যদিও তার যৌক্তিকতা সন্দেহজনক বলে মনে হচ্ছে, জেআইটি-অপ্টিমাইজ অফ ফাংশন কলের ক্ষমতা দেওয়া given panopticoncentral.net/2004/05/31/the-native-net-language
ToolmakerSteve

0

একসময় আমার মনে আছে এমএসডিএন গ্রন্থাগার রাষ্ট্রটি সিএসটিআর () ব্যবহার করার জন্য দেখেছিল কারণ এটি দ্রুত ছিল। আমি জানি না যদিও এটি সত্য কিনা।


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