VB.NET এর লুকানো বৈশিষ্ট্য?


121

আমি সি # এর লুকানো বৈশিষ্ট্যগুলির মাধ্যমে বেশ কিছুটা ব্রাউজিং শিখেছি এবং ভিবি.এনইটি-র জন্য অনুরূপ কিছু না পেয়ে আমি অবাক হয়েছি।

তাহলে এর কিছু লুকানো বা কম পরিচিত বৈশিষ্ট্যগুলি কী কী?

উত্তর:


128

Exception Whenদফা মূলত অজানা।

এই বিবেচনা:

Public Sub Login(host as string, user as String, password as string, _
                            Optional bRetry as Boolean = False)
Try
   ssh.Connect(host, user, password)
Catch ex as TimeoutException When Not bRetry
   ''//Try again, but only once.
   Login(host, user, password, True)
Catch ex as TimeoutException
   ''//Log exception
End Try
End Sub

9
আপনি যদি কোনও নির্দিষ্ট এসকিএলএক্সসেপশন ধরতে চান তবে দরকারী - 2 বলুন যা আমি যদি সঠিকভাবে মনে করি তবে নেটওয়ার্ক টাইমআউট হয়: স্কেলএক্সসেপশন হিসাবে প্রাক্তন ধরুন যেখানে ex.code = -2
পন্ডিডাম

কি দারুন! আমি কেবল এটি পড়েছি এবং এটিকে ব্যবহার করার জন্য অবিলম্বে ব্যবহার করার চেষ্টা করেছিলাম যা গত সপ্তাহে আমি লিখেছিলাম / চেষ্টা ব্লকটিকে সহজ করে তুলি। আমি এই নতুন ছিল না।
জন এম গ্যান্ট

1
+1 এবং এখানেই নেট সিএলআর টিম ব্লগ ব্যাখ্যা করেছে যে ব্যতিক্রম ফিল্টারগুলি কেন কার্যকর ব্লগস.এমএসএনএন
ক্লারটিয়াম /

5
এটি কেবল লুকানোই নয়, এটি সি # তেও পাওয়া যায় না।
চিজো

82

প্রথা Enum এস

ভিবির সত্যিকারের লুকানো বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল completionlistএক্সএমএল ডকুমেন্টেশন ট্যাগ যা নিজের তৈরি করতে ব্যবহার করা যেতে পারেEnum বর্ধিত কার্যকারিতা সহ ধরণের । যদিও এই বৈশিষ্ট্যটি সি # তে কাজ করে না।

আমার সাম্প্রতিক কোডের একটি উদাহরণ:

'
''' <completionlist cref="RuleTemplates"/>
Public Class Rule
    Private ReadOnly m_Expression As String
    Private ReadOnly m_Options As RegexOptions

    Public Sub New(ByVal expression As String)
        Me.New(expression, RegexOptions.None)
    End Sub

    Public Sub New(ByVal expression As String, ByVal options As RegexOptions)
        m_Expression = expression
        m_options = options
    End Sub

    Public ReadOnly Property Expression() As String
        Get
            Return m_Expression
        End Get
    End Property

    Public ReadOnly Property Options() As RegexOptions
        Get
            Return m_Options
        End Get
    End Property
End Class

Public NotInheritable Class RuleTemplates
    Public Shared ReadOnly Whitespace As New Rule("\s+")
    Public Shared ReadOnly Identifier As New Rule("\w+")
    Public Shared ReadOnly [String] As New Rule("""([^""]|"""")*""")
End Class

এখন, হিসাবে ঘোষিত ভেরিয়েবলের মান নির্ধারণের সময় Rule, IDE সম্ভাব্য মানগুলির একটি IntelliSense তালিকা সরবরাহ করেRuleTemplates

/ সম্পাদনা:

যেহেতু এটি একটি বৈশিষ্ট্য যা আইডিই'র উপর নির্ভর করে, আপনি এটি ব্যবহার করার সময় এটি কেমন দেখাচ্ছে তা দেখানো কঠিন তবে আমি কেবল একটি স্ক্রিনশট ব্যবহার করব:

ক্রিয়াকলাপের সমাপ্তির তালিকা

আসলে, ইন্টেলিসেন্স ব্যবহার করার সময় আপনি যা পান তার সাথে 100% অভিন্ন Enum


আকর্ষণীয় - আপনি যখন এটি গ্রাস করেন তখন আপনি কী দেখায় তার উদাহরণ দেখাতে পারেন?
ব্রায়ান ম্যাকেকে 19-15

দেখে মনে হচ্ছে কেউ এখনও নিয়ম কন্সট্রাক্টরকে সরাসরি কল করে তাদের নিজস্ব নিয়ম তৈরি করতে পারে? যদি তা হয়, এবং আপনি যদি এটি থামাতে চান, আপনি কি আপনার লাইব্রেরিতে কনস্ট্রাক্টরকে "বন্ধু" হিসাবে ঘোষণা করতে পারেন?
জোয়েল কোহোর্ন

জোয়েল, আমার উদাহরণ কোডে আমি ইচ্ছাকৃতভাবে এটি নিষিদ্ধ করিনি। পরিবর্তে, আমি ব্যবহারকারীকে কিছু সাধারণ নিয়ম অফার করি এবং নিজস্ব, বিশেষায়িত বিধি তৈরি করার অনুমতি দিই। আপনি অবশ্যই যেমন কন্সট্রাকটর উপলক্ষে এই প্রতিরোধ করতে পারি friendবা enum হিসাবে একই বর্গ ব্যবহার করে: Ruleপরিবর্তে RuleTemplate
কনরাড রুডল্ফ

লুকানো দরকারী বৈশিষ্ট্য ব্যবহারের তালিকা সহ কোথাও আছে? এটির মুখোমুখি এটি অবিশ্বাস্য মনে হয় তবে আমি নিশ্চিত না যে আমি কোথায় এটি ব্যবহার করব বা এটি যদি এনামগুলিতে জেনেরিক সীমাবদ্ধ না থাকার কিছুক্ষেত্রে প্রাথমিক গ্রিপ সমাধান করতে পারে।
মাসলো

@ ম্যাসলো: এখানে কোনও বৈশিষ্ট্য জড়িত নেই। এটি একটি এক্সএমএল মন্তব্য।
জোয়েল কোহোর্ন

49

আপনি কি লাইক তুলনা অপারেটর লক্ষ্য করেছেন?

Dim b As Boolean = "file.txt" Like "*.txt"

এমএসডিএন থেকে আরও

Dim testCheck As Boolean

' The following statement returns True (does "F" satisfy "F"?)'
testCheck = "F" Like "F"

' The following statement returns False for Option Compare Binary'
'    and True for Option Compare Text (does "F" satisfy "f"?)'
testCheck = "F" Like "f"

' The following statement returns False (does "F" satisfy "FFF"?)'
testCheck = "F" Like "FFF"

' The following statement returns True (does "aBBBa" have an "a" at the'
'    beginning, an "a" at the end, and any number of characters in '
'    between?)'
testCheck = "aBBBa" Like "a*a"

' The following statement returns True (does "F" occur in the set of'
'    characters from "A" through "Z"?)'
testCheck = "F" Like "[A-Z]"

' The following statement returns False (does "F" NOT occur in the '
'    set of characters from "A" through "Z"?)'
testCheck = "F" Like "[!A-Z]"

' The following statement returns True (does "a2a" begin and end with'
'    an "a" and have any single-digit number in between?)'
testCheck = "a2a" Like "a#a"

' The following statement returns True (does "aM5b" begin with an "a",'
'    followed by any character from the set "L" through "P", followed'
'    by any single-digit number, and end with any character NOT in'
'    the character set "c" through "e"?)'
testCheck = "aM5b" Like "a[L-P]#[!c-e]"

' The following statement returns True (does "BAT123khg" begin with a'
'    "B", followed by any single character, followed by a "T", and end'
'    with zero or more characters of any type?)'
testCheck = "BAT123khg" Like "B?T*"

' The following statement returns False (does "CAT123khg" begin with'
'    a "B", followed by any single character, followed by a "T", and'
'    end with zero or more characters of any type?)'
testCheck = "CAT123khg" Like "B?T*"

3
কিসের অপেক্ষা? এটা আমার কাছে নতুন! হুম, এই একটি helluva অনেক VB.NET স্ট্রিং ম্যানিপুলেশন সঙ্গে বিকল্প চেয়ে ভালো: ডি
অগভীর নলকুপ

.. !! আমি জানতাম না যে যদিও আমি বেশ কয়েকটি vb.net প্রকল্পে কাজ করেছি! আকর্ষণীয় বৈশিষ্ট্য ...
মেটা-নাইট

woooooooooooooooooooooooow! ধন্যবাদ! এটা দারুণ! এটি কি ইলিনাক, ডি লিন্কেও কাজ করে? এক্সলিনক সম্পর্কে কী?
শিমি ওয়েটজ্যান্ডলার

@ ডটজো হুম? এই গ্লোবগুলি সম্পর্কে 'অলস' কিছুই নেই।
জোশ লি

এটি কীভাবে সম্পাদন করে, হুডের নীচে কী ঘটছে? এটি কি রেজি প্রাক্তন গ্রন্থাগারগুলির প্রতিশব্দ?
brumScouse

48

typedefs

ভিজিবি এলিয়াসগুলির typedefমাধ্যমে একটি আদিম ধরনের জানে Import:

Imports S = System.String

Dim x As S = "Hello"

জেনেরিক ধরণের সাথে একত্রে ব্যবহৃত হলে এটি আরও কার্যকর:

Imports StringPair = System.Collections.Generic.KeyValuePair(Of String, String)

2
দয়া করে একটি উদাহরণ দেখান আমদানি শব্দটি আমার আইডিইতে অচেনা।
শিমি ওয়েটজ্যান্ডলার

5
Importsএটা করা উচিত. ;-) একরকম, এই ত্রুটিটি প্রায় পুরো বছর ধরে সনাক্ত করা হয়নি (এবং ২৮ টি উপস্থাপনা সংগ্রহ করেছে)।
কনরাড রুডল্ফ

আমি সবসময় ভাবতাম যে আমি জেনেরিকের জন্য খেলাপি কীভাবে একটি নতুন "প্রকার" তৈরি করতে পারি! শান্ত!
ইডিলন

3
আমদানি, আমদানি, আমদানি, যাই হোক না কেন! শীশ, আপনি ভাবেন যে আমরা এই পোস্টগুলিকে উজ্জীবিত করার আগে সেগুলি পড়েছি !
MarkJ

ভিজ্যুয়াল স্টুডিও টেস্টগুলিতে xunit ব্যবহারের জন্য দুর্দান্তImports Assert = xUnit.Assert
হুইলিন

45

উহু! এবং এক্সএমএল লিটারালগুলি ভুলে যাবেন না ।

Dim contact2 = _
        <contact>
          <name>Patrick Hines</name>
          <%= From p In phoneNumbers2 _
            Select <phone type=<%= p.Type %>><%= p.Number %></phone> _
          %>
        </contact>

এটাই আমি বলতে যাচ্ছিলাম। আসলে, আমি এক্সএমএল লিটারেলগুলি এমন উদ্দেশ্যে ব্যবহার করেছি যাতে এটি উদ্দেশ্যপ্রাপ্ত ছিল না। আমি এটি জাভাস্ক্রিপ্ট তৈরি করতে ব্যবহার করেছি ... swortham.blogspot.com/2009/03/vb-2008.html
স্টিভ

9
অন্যান্য জিনিসের মধ্যে, আপনি কুশলী স্ট্রিং পলায়নের জন্য এক্সএমএল লিটারালগুলি ব্যবহার করতে পারেন, যেমন আপনি যখন স্ট্রিংগুলি ব্যবহার করেন তখন সেগুলিতে ডাবল কোট থাকে। শুধু একটি XML আক্ষরিক ভিতরে স্ট্রিং করা এবং কল মূল্য, এরকম: <string>This string contains "quotes" and it's OK.</string>.Value । (আমি এই বিশেষভাবে কুশলী যখন CSV ফাইল যেখানে প্রত্যেক ক্ষেত্র কোট ছিল পার্স উপর পরীক্ষা লেখার এটি হবে পাওয়া না হাত দ্বারা ঐ সমস্ত কোট অব্যাহতি হয়েছে মজা আমার পরীক্ষার লাইন।)
রায়ান লন্ডি

2
@ কাইরলেসা: +১, দুর্দান্ত মন্তব্য। আসলে, এটি মাল্টি-লাইন স্ট্রিং (আলিঙ্গন এসকিউএল স্টেটমেন্ট ইত্যাদি) নির্দিষ্ট করার একটি দুর্দান্ত উপায়।
হেইনজি

ইনলাইন এক্সএমএল কল্পনা করার মতো সবচেয়ে খারাপ ভিবি.এনইটি বৈশিষ্ট্যগুলির মধ্যে একটি। অসমাপ্ত সত্য
গ্রান্ট থমাস

39

অবজেক্ট ইনিশিয়েশনও সেখানে আছে!

Dim x as New MyClass With {.Prop1 = foo, .Prop2 = bar}

1
আমি বিশ্বাস করতে পারি না তারা কোঁকড়া ধনুর্বন্ধনী সঙ্গে গেছে। আমাদের কাছে ইতিমধ্যে একটি বিবৃতি আছে .. তারা কেবল সেই বাক্য গঠনটি আবার ব্যবহার করতে পারত।
স্যাম অ্যাক্স

2
আমি জানি, এটি আপনাকে দেখানোর জন্যই তৈরি করা হয়েছে যে রাস্তায় কোনও পুলিশ নেই ...
LOL

4
সংকলক লেখকরা যখন নিজেরাই সি / সি ++ প্রোগ্রামার হলেন তখন কি হয়। তারা সি বাক্যবিন্যাসকে অন্য ভাষায় পিছলে যায় কারণ তারা কোনও কিছু ভাল হওয়ার বিষয়ে ধারণা করতে পারে না।
আরবেরি ইয়ং

38

DirectCast

DirectCastএকটি আশ্চর্যজনক। পৃষ্ঠতলে এটি CTypeঅপারেটরের মতোই কাজ করে যে এটি কোনও বস্তুকে এক প্রকার থেকে অন্য প্রকারে রূপান্তর করে। তবে এটি নিয়মের অনেক কঠোর সেট দ্বারা কাজ করে। CTypeপ্রকৃত আচরণ তাই প্রায়শই অস্বচ্ছ এবং কোন ধরণের রূপান্তর কার্যকর করা হয় তা মোটেও স্পষ্ট নয়।

DirectCast শুধুমাত্র দুটি স্বতন্ত্র অপারেশন সমর্থন করে:

  • একটি মান ধরণের আনবক্সিং এবং
  • ক্লাস শ্রেণিবিন্যাসে উজান।

অন্য যে কোন ঢালাই কাজ নয় (যেমন একটি unbox বের করার চেষ্টা করবে Integerএকটি থেকে Double) এবং একটি কম্পাইল সময় / রানটাইম এরর পরিণাম ডেকে আনবে (পরিস্থিতির উপর নির্ভর করে এবং যা স্ট্যাটিক টাইপ টিক চিহ্ন দেওয়ার দ্বারা সনাক্ত করা যাবে)। আমি তাই ব্যবহারDirectCast যখনই সম্ভব , কারণ এটি আমার অভিপ্রায়টিকে সবচেয়ে ভালভাবে ধারণ করে: পরিস্থিতির উপর নির্ভর করে আমি হয় হয় পরিচিত ধরণের মান আনবক্স করতে চাই বা একটি উজান সম্পাদন করতে চাই। গল্পের শেষে.

ব্যবহার CTypeঅন্যদিকে করে কোডের পাঠককে ভাবছেন যে প্রোগ্রামার আসলেই কী উদ্দেশ্য করেছিল কারণ এটি ব্যবহারকারী-সংজ্ঞায়িত কোড কল করার সাথে সাথে বিভিন্ন ধরণের অপারেশনের সমাধান করে।

কেন এটি একটি লুকানো বৈশিষ্ট্য? ভিবি দলটি একটি গাইডলাইন 1 প্রকাশ করেছে যা কোডটিকে DirectCastআরও অভিন্ন করার জন্য (যদিও এটি আসলে দ্রুততর!) ব্যবহারকে নিরুৎসাহিত করে । আমি যুক্তি দিচ্ছি যে এটি একটি খারাপ নির্দেশিকা যা উল্টো করা উচিত: যখনই সম্ভব হয়, DirectCastআরও সাধারণ CTypeঅপারেটরের পক্ষ নেয় । এটি কোডটিকে আরও পরিষ্কার করে তোলে। CTypeঅন্যদিকে, কেবলমাত্র যদি এটি প্রকৃতপক্ষে উদ্দেশ্যপ্রাপ্ত হয় তখনই ডাকা উচিত, অর্থাত্ যখন সংকীর্ণ CTypeঅপারেটর (সিএফ। অপারেটর ওভারলোডিং ) কল করা উচিত।


1) আমি গাইডলাইনটির একটি লিঙ্ক নিয়ে আসতে পারিনি তবে আমি পল ভিককে এটি (ভিবি দলের প্রধান বিকাশকারী) গ্রহণ করতে পেরেছি :

বাস্তব বিশ্বে, আপনি খুব কমই পার্থক্যটি লক্ষ্য করতে চলেছেন, তাই আপনি আরও নমনীয় রূপান্তর অপারেটর যেমন সিটাইপ, সিআইএনটি ইত্যাদির সাথে যেতে পারেন might


(জ্যাক দ্বারা সম্পাদনা করুন: এখানে আরও জানুন: কীভাবে ভিবি.এনইটি-তে কাস্ট করা উচিত? )


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

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

ইয়ুডার: 100% সঠিক। এটি তখন লজ্জার বিষয় যে আমি TryCastতখনই উল্লেখ করি নি যেহেতু আমার প্রধানত হ'ল একটি বিস্তৃত ব্যবহারের সাথে বেছে নিতে CType
কনরাড রুডল্ফ

@ ম্যাসলো: অবশ্যই এটি হয় না, যেহেতু এনামগুলি মান ধরণের এবং TryCastডকুমেন্টেশন অনুসারে কেবলমাত্র রেফারেন্স টাইপগুলিতে কাজ করে।
কনরাড রুডল্ফ

+1: হি। আমি স্বীকার করতে পেরেছি, আমি কেবল এটি পড়েছি এবং ভেবেছিলাম "ওহ হ্যাঁ, ডাইরেক্টকাস্ট, আমি কীভাবে এটি ভুলে গেছি?" এবং তারপরে আমি এটিকে কোডের আমার পরের লাইনে ব্যবহার করেছি (যেহেতু আমি সত্যই সিটিটাইপ পছন্দ করি না)।
আরবেরি ইয়ং

37

If শর্তসাপেক্ষ এবং coalesce অপারেটর

আপনি এটিকে কীভাবে লুকিয়ে রাখবেন তা আমি জানি না, তবে আইফএফ ([অভিব্যক্তি], [যদি সত্য হয় তবে মান], [মান যদি মিথ্যা হয়]) হিসাবে অবজেক্ট ফাংশনটি গণনা করতে পারে।

এটা এত হিসাবে লুকানো না অবচিত ! ভিবি 9 তে Ifঅপারেটর রয়েছে যা অনেক ভাল এবং সি # এর শর্তসাপেক্ষ এবং কোয়েলেস অপারেটর হিসাবে ঠিক কাজ করে (আপনি যা চান তার উপর নির্ভর করে):

Dim x = If(a = b, c, d)

Dim hello As String = Nothing
Dim y = If(hello, "World")

অন্য একটি উদাহরণ দেখানোর জন্য সম্পাদিত:

এটি এর সাথে কাজ করবে If()তবে এর সাথে ব্যতিক্রম ঘটবেIIf()

Dim x = If(b<>0,a/b,0)

ভাল লাগল, আমি এটা জানতাম না! আমি গতকাল সবেমাত্র আইআইএফ ব্যবহার করেছি তাই আমি সেই কোড ব্লকে পুনরায় দেখা করতে যাচ্ছি।
শন গফ

4
ভিএস 2005 বলুন যে। আমরা সকলেই সর্বশেষতম এবং সর্বকালের সাথে কাজ করতে পাই না।
স্যাম এরউইন

3
@ স্লুফ, বাজে কথা এই পদ্ধতিটি 100% প্রকার নিরাপদ এবং এটি একই ধরণের কোনও অবজেক্টকে এর (দ্বিতীয় এবং তৃতীয়) যুক্তি হিসাবে ফিরিয়ে দেয়। অতিরিক্তভাবে, আর্গুমেন্টগুলির মধ্যে অবশ্যই একটি বিস্তৃত রূপান্তর থাকতে হবে, অন্যথায় একটি সংকলন ত্রুটি হবে কারণ প্রকারগুলি মেলে না।
কনরাড রুডল্ফ

1
হ্যাঁ, এর আইআইএফ () এটি নিরাপদ নয়
পন্ডিদাম

2
@ বার্নবিল বাস্তবে, এটি সি এবং পার্লের অপারেটরের সম্পূর্ণ সমতুল্য:? , এটি কেবল একটি সরলিকৃত সংস্করণ নয়।
কনরাড রুডল্ফ

32

এটি একটি চমৎকার এক। ভিবি.নেটের মধ্যে সিলেক্ট কেস স্টেটমেন্টটি খুব শক্তিশালী।

অবশ্যই মান আছে

Select Case Role
  Case "Admin"
         ''//Do X
  Case "Tester"
         ''//Do Y
  Case "Developer"
         ''//Do Z
  Case Else
       ''//Exception case
End Select

তবে আরও আছে ...

আপনি রেঞ্জগুলি করতে পারেন:

Select Case Amount
 Case Is < 0
    ''//What!!
 Case 0 To 15
   Shipping = 2.0
 Case 16 To 59
    Shipping = 5.87
 Case Is > 59
    Shipping = 12.50
 Case Else
    Shipping = 9.99
 End Select

এবং আরও বেশি...

আপনি (যদিও এটি ভাল ধারণা নাও হতে পারে) একাধিক ভেরিয়েবলগুলিতে বুলিয়ান চেক করতে পারেন:

Select Case True
 Case a = b
    ''//Do X
 Case a = c
    ''//Do Y
 Case b = c
    ''//Do Z
 Case Else
   ''//Exception case
 End Select

5
আসলে আপনি একটি দম্পতি মিস করেছেন: ক) একাধিক ভেরিয়েবল পরীক্ষা করার জন্য "সিলেক্ট কেস ট্রু" ব্যবহার করুন, খ) "কেস এ, বি, ..." ফর্ম এবং এমনকি গ) ":" প্রয়োগ করতে " শর্তের ধারাটির সাথে মৃত্যুদন্ড কার্যকর করার বিবরণীটি লাইন করুন (যদিও অনেকে এটি পছন্দ করেন না)।
আরবেরি ইয়ং

6
সত্য নির্বাচন করুন কেস ব্যবহার করবেন না। শুধু যদি একটি বিবৃতি ব্যবহার করুন।
রায়ান লুন্ডি 21

4
আমি জায়ান্ট ইফেলস স্টেটমেন্টের চেয়ে সিলেক্ট কেসটি পড়তে অনেক সহজ মনে করি।
দ্বৈত

সমস্যা Select Case Trueহয় নি দেখায় যেমন যদি এটা মূল্যায়ন প্রতিটি এর Caseবিবৃতি এবং প্রতিটি এক যা সত্য কোড রান। তবে বাস্তবে এটি তাদের একের পর এক মূল্যায়ন করে এবং কেবল প্রথমটির কোডটি চালায় যা সত্য। সিনট্যাক্সIf এই ক্ষেত্রে অনেক বেশি পরিষ্কার ( If...Else If...Else If...Else)।
রায়ান লন্ডি

31

আমি সমস্ত সময় ব্যবহার করি এমন একটি প্রধান সময় সেভার হ'ল উইথ কীওয়ার্ড:

With ReallyLongClassName
    .Property1 = Value1
    .Property2 = Value2
    ...
End With

আমার চেয়ে বেশি টাইপ করা আমার পছন্দ নয়!


তবে এটি কিছু লুকানো বাগগুলি তৈরি করে, বিশেষত যখন আপনি সাথে থাকে
বরুণ মহাজন

2
আমি এমনকি জানতাম না যে আপনি একটি বিদ্যমান সঙ্গে একটি নতুন সঙ্গে রাখতে পারেন। এটাই তো খালি!
বব কিং

2 باب: এটি নিবিড় নয়, আমি পরামর্শ দেব .. এটি যত্নের সাথে ব্যবহার করার জন্য এটি কেবল একটি ভাষা নির্মাণ। ধারাবাহিক লাইনে প্রচুর সংখ্যক বৈশিষ্ট্য নির্ধারণের জন্য এটি দুর্দান্ত, তবে একটি এলোমেলো সন্ধান করুন। কোডের একটি জটিল টুকরোগুলি অনুসন্ধান করুন এবং তারপরে উপরের স্টেটমেন্ট এক্স লাইনের সাথে শিকার করা বৈশিষ্ট্যটির ভাল ব্যবহার নয়।
ক্রিসা

2
সি # এর কি ইচ্ছা আছে? নাকি আমি ঘুমিয়ে পড়েছি এবং তা কি ইতিমধ্যে সি # লুকানো-বৈশিষ্ট্যগুলির উত্তরগুলিতে ...? ;-)
পিএসশির

1
@ বু: আপনি ঠিক বলেছেন তবে এটি এখনও বিরক্তিজনক যে আপনি এটি ওয়াচ তালিকায় যুক্ত করতে পারবেন না।
মেটা-নাইট

31

সেরা এবং সহজ সিএসভি পার্সার:

Microsoft.VisualBasic.FileIO.TextFieldParser

মাইক্রোসফ্টে একটি রেফারেন্স যুক্ত করে। ভিজুয়ালবাসিক, এটি অন্য কোনও। নেট ভাষাতে ব্যবহার করা যেতে পারে, যেমন সি #


5
+1 এটি অদ্ভুত যে কীভাবে সি # লোকেরা এটিকে বিবেচনা না করে ফাইলহেল্পারে চলে run আমি নিশ্চিত যে ফাইলহেল্পার্স দুর্দান্ত, তবে এটি একটি বাহ্যিক নির্ভরতা।
মার্কজে

@ মারকজে আমি ধারণা করছি এটি অজ্ঞতার কারণে
নাথান কোপ

এই ক্লাসটি সন্ধান করার চেষ্টা করে আমি জাহান্নামকে গুগল করেছিলাম এবং কখনও করি নি, এটি প্রলম্বনের জন্য ধন্যবাদ!
পিঙ্গু

26
  • AndAlso / OrElse লজিকাল অপারেটরগুলি

(সম্পাদনা: এখানে আরও জানুন: আমি কি সর্বদা AndAlso এবং OrElse অপারেটর ব্যবহার করা উচিত? )


আমি এটিকে একেবারেই গোপন বলব না, যদি পরিচিতি হয়না কিছু না তবে AndAlso পরিচিতি যোগাযোগ করুন ont যোগাযোগ করুন> 0 তবে এটি করুন, আপনি যদি ব্যবহার করেন এবং আপনার একটি ব্যতিক্রম ছুঁড়ে ফেলা হবে।
শিমি ওয়েটজ্যান্ডলার

25

পদ্ধতিতে স্থির সদস্য।

উদাহরণ স্বরূপ:

Function CleanString(byval input As String) As String
    Static pattern As New RegEx("...")

    return pattern.Replace(input, "")
End Function

উপরের ফাংশনে, প্যাটার্নের নিয়মিত প্রকাশটি কেবল কখনও তৈরি করা হবে একবারই ফাংশনটি যতবার বলা হোক না কেন।

আরেকটি ব্যবহার হ'ল "এলোমেলো" উদাহরণটি চারপাশে রাখা:

Function GetNextRandom() As Integer
    Static r As New Random(getSeed())

    Return r.Next()
End Function 

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


1
এর একটি ব্যবহার হ'ল একটি কাউন্টার রাখা যা প্রতিবার পদ্ধতিটি বলা হওয়ার পরে বৃদ্ধি পাবে। যদি ভেরিয়েবলটি স্থিতিশীল হিসাবে চিহ্নিত করা হয়, তবে প্রতিটি পদ্ধতির কলটিতে এটি পুনরায় পুনর্নির্মাণ করা হবে না; এটি কেবলমাত্র প্রথম কলটিতে আরম্ভ করা হবে এবং এরপরে এর মান ধরে রাখতে হবে।
রায়ান লন্ডি

এই কারণেই স্থির শ্রেণির সদস্যদের ভিবি.এনইটি
এনরিকো ক্যাম্পিডোগলিও

স্ট্যাটিকটি ভিবি.এনইটি-তে খারাপ ফর্ম যা ক্লাসিক ভিবিতে ছিল তার চেয়েও বেশি। স্থির পরিবর্তনশীল যখনই এবং যেখানেই সম্ভব এড়ানো উচিত।
স্যাম অ্যাক্স

6
@ বুউ - এটি বেশ সুন্দর। আপনার ন্যায়সঙ্গত কি? আমি মনে করি স্থিতিশীল ভেরিয়েবলগুলি দরকারী।
মার্কজে

4
স্ট্যাটিক, উপরের উদাহরণগুলির মতো ব্যবহৃত, এনক্যাপসুলেশনের এক অনন্য রূপের অনুমতি দেয়: শ্রেণি-স্তরের ভেরিয়েবলগুলির পদ্ধতি-স্তরের সুযোগ রয়েছে have এটি ব্যতীত, আপনাকে এমন একটি শ্রেণিক স্তরের ভেরিয়েবল তৈরি করতে হবে যা কোনও শ্রেণীর সদস্যের জন্য অ্যাক্সেসযোগ্য হবে, এমনকি আপনি যদি এটি কেবল একটি পদ্ধতিতে ব্যবহার করেন তবে।
রায়ান লুন্ডি 21

25

Vb এ এই অপারেটরগুলির মধ্যে একটি পৃথক রয়েছে:

/হয় Double
\হয় Integerবাকি উপেক্ষা

Sub Main()
    Dim x = 9 / 5  
    Dim y = 9 \ 5  
    Console.WriteLine("item x of '{0}' equals to {1}", x.GetType.FullName, x)
    Console.WriteLine("item y of '{0}' equals to {1}", y.GetType.FullName, y)

    'Results:
    'item x of 'System.Double' equals to 1.8
    'item y of 'System.Int32' equals to 1
End Sub

1
মিলিয়ন কোডের কোডে একটি সূচি খুঁজে পাওয়ার চেষ্টা করার সময় আমি এই কঠিন উপায়ে শিখেছি। নিয়মিত বনাম পূর্ণসংখ্যা বিভাগ। ভালো পরামর্শ!
জেসন

23

আমি সত্যিই আমার "আমার" নেমস্পেসটি পছন্দ করি যা ভিজ্যুয়াল বেসিক 2005 সালে প্রবর্তিত হয়েছিল My আমার বেশ কয়েকটি গ্রুপের তথ্য এবং কার্যকারিতার শর্টকাট। এটি নিম্নলিখিত ধরণের তথ্যে দ্রুত এবং স্বজ্ঞাত অ্যাক্সেস সরবরাহ করে:

  • আমার কম্পিউটার কম্পিউটার: কম্পিউটার সম্পর্কিত ফাইল যেমন ফাইল সিস্টেম, নেটওয়ার্ক, ডিভাইসগুলি, সিস্টেমের তথ্য ইত্যাদির অ্যাক্সেস এটি My.Computer.Network, My.Computer.FileSystem, এবং আমার সহ অনেকগুলি গুরুত্বপূর্ণ সংস্থার অ্যাক্সেস সরবরাহ করে It .Computer.Printers।
  • My.Application : নির্দিষ্ট অ্যাপ্লিকেশন সম্পর্কিত নাম যেমন নাম, সংস্করণ, বর্তমান ডিরেক্টরি ইত্যাদি সম্পর্কিত অ্যাক্সেস
  • My.User : বর্তমান অনুমোদিত ব্যবহারকারী সম্পর্কিত তথ্য অ্যাক্সেস।
  • আমার
  • মাই.সেটেটিংস : দৃ of়ভাবে টাইপযুক্ত অ্যাপ্লিকেশনটির কনফিগারেশন সেটিংসে অ্যাক্সেস।

এটি কেবল দুর্দান্ত এবং প্রতিটি ভিবি নেট নেটওয়ার্কের লোকেরা আমার নামস্থানে জিনিসগুলি জানা উচিত, এটি এত দরকারী।
ড। খারাপ

আমার। * এফটিডাব্লু :)।
ড। মন্দ

3
এটি একরকম দরকারী, তবে আমি নামটি ঘৃণা করি। আমাকে এই সিক্রেজগেক.নেট
রেফ্যাক্টভিবি.এএসপি-

23

কাস্টম ইভেন্টস

খুব কমই দরকারী, ইভেন্ট হ্যান্ডলিং ভারি কাস্টমাইজ করা যেতে পারে:

Public Class ApplePie
    Private ReadOnly m_BakedEvent As New List(Of EventHandler)()

    Custom Event Baked As EventHandler
        AddHandler(ByVal value As EventHandler)
            Console.WriteLine("Adding a new subscriber: {0}", value.Method)
            m_BakedEvent.Add(value)
        End AddHandler

        RemoveHandler(ByVal value As EventHandler)
            Console.WriteLine("Removing subscriber: {0}", value.Method)
            m_BakedEvent.Remove(value)
        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
            Console.WriteLine("{0} is raising an event.", sender)
            For Each ev In m_BakedEvent
                ev.Invoke(sender, e)
            Next
        End RaiseEvent
    End Event

    Public Sub Bake()
        ''// 1. Add ingredients
        ''// 2. Stir
        ''// 3. Put into oven (heated, not pre-heated!)
        ''// 4. Bake
        RaiseEvent Baked(Me, EventArgs.Empty)
        ''// 5. Digest
    End Sub
End Class

এরপরে নিম্নলিখিত ফ্যাশনে এটি পরীক্ষা করা যেতে পারে:

Module Module1
    Public Sub Foo(ByVal sender As Object, ByVal e As EventArgs)
        Console.WriteLine("Hmm, freshly baked apple pie.")
    End Sub

    Sub Main()
        Dim pie As New ApplePie()
        AddHandler pie.Baked, AddressOf Foo
        pie.Bake()
        RemoveHandler pie.Baked, AddressOf Foo
    End Sub
End Module

দুর্দান্ত মনে হচ্ছে, তবে আমার যদি কখনও এটির প্রয়োজন হয় তবে আমি মনে করি যে আমি কিছু ভুল করেছি ;-)। এটি কেবল KISS নীতির বিরুদ্ধে বলে মনে হচ্ছে।
ক্রিসি 1

4
এক বা একাধিক ব্যতিক্রম ছুঁড়ে ফেললেও প্রতিটি সিঙ্ক ইভেন্টটি পায় তা নিশ্চিত করতে চাইলে এটি সত্যই কার্যকর really
জোনাথন অ্যালেন

আর একটি মান (আমি এটি কেবল এমএসডিএন সাইটে পড়েছি) হ'ল যদি আপনার শ্রেণিটি প্রচুর ইভেন্ট ছুড়ে দেয় তবে আপনি প্রতিটি ইভেন্টের জন্য কোনও ক্ষেত্র ঘোষণা করার পরিবর্তে একটি হ্যাশ টেবিল / অভিধানটিকে একটি ধারক হিসাবে ব্যবহার করতে বাধ্য করতে পারেন। এমএসডিএন.মাইক্রোসফট.এইন.উস
লাইবারি

কুল। আমি ভেবেছিলাম এই বৈশিষ্ট্যগুলির মধ্যে এটি সি # এবং ভিবি.এনইটি (যা একটিতে পারে তবে অন্যটির কাছে এর সিনট্যাক্স নেই) আলাদা করে দেয়। অন্তত জেনে ভালো লাগলো আমি এই ক্ষেত্রে ভুল ছিলাম।
পিএসশির

21

আমি স্রেফ একটি নিবন্ধ পেয়েছি ""! অপারেটর, "অভিধান অনুসন্ধান অপারেটর" হিসাবেও জানেন। নিবন্ধটির একটি অংশ এখানে দেওয়া হয়েছে: http://panopticoncentral.net/articles/902.aspx

এর প্রযুক্তিগত নাম! অপারেটর হ'ল "অভিধান দেখানোর অপারেটর"। একটি অভিধান হ'ল কোনও সংগ্রহের ধরণ যা কোনও সংখ্যার পরিবর্তে কী দ্বারা সূচকযুক্ত, ঠিক যেমন একটি ইংরেজী অভিধানে প্রবেশের শব্দগুলি দ্বারা আপনি যে সংজ্ঞাটি চান তার দ্বারা সূচী করা হয়। অভিধানের ধরণটির সর্বাধিক সাধারণ উদাহরণ হ'ল সিস্টেম.কালেকশনস ash হ্যাশটেবল, যা আপনাকে হ্যাশটবেলে (কী, মান) জোড় যুক্ত করতে এবং তারপরে কীগুলি ব্যবহার করে মানগুলি পুনরুদ্ধার করতে দেয়। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি হ্যাশটেবলে তিনটি এন্ট্রি যুক্ত করেছে এবং "পোর্ক" কীটি ব্যবহার করে সেগুলির মধ্যে একটিকে আপ দেখায়।

Dim Table As Hashtable = New Hashtable
Table("Orange") = "A fruit"
Table("Broccoli") = "A vegetable"
Table("Pork") = "A meat" 
Console.WriteLine(Table("Pork"))

দ্য ! অপারেটরটি কোনও অভিধান টাইপ থেকে মানগুলি সন্ধান করতে ব্যবহার করা যেতে পারে যা স্ট্রিংগুলি ব্যবহার করে এর মানকে সূচক করে। এর পরে শনাক্তকারী! লুকিং অপারেশনে কী হিসাবে ব্যবহৃত হয়। সুতরাং উপরের কোডটি পরিবর্তে লেখা যেতে পারে:

Dim Table As Hashtable = New Hashtable
Table!Orange = "A fruit"
Table!Broccoli = "A vegetable"
Table!Pork = "A meat"
Console.WriteLine(Table!Pork)

দ্বিতীয় উদাহরণটি সম্পূর্ণরূপে প্রথমটির সমতুল্য তবে কমপক্ষে আমার দৃষ্টিতে কেবল অনেক সুন্দর দেখায়। আমি দেখতে পাচ্ছি যে অনেক জায়গা আছে যেখানে! ব্যবহার করা যেতে পারে, বিশেষত যখন এটি এক্সএমএল এবং ওয়েবে আসে, যেখানে স্ট্রিং অনুসারে সংখ্যার সংগ্রহ রয়েছে col একটি দুর্ভাগ্য সীমাবদ্ধতা হ'ল জিনিসটি অনুসরণ করা! এখনও একটি বৈধ শনাক্তকারী হতে হবে, সুতরাং আপনি কী হিসাবে যে স্ট্রিংটি ব্যবহার করতে চান তাতে যদি কোনও অবৈধ শনাক্তকারী চরিত্র থাকে তবে আপনি এটি ব্যবহার করতে পারবেন না! অপারেটর. (উদাহরণস্বরূপ, আপনি "টেবিল! AB $ CD = 5" বলতে পারবেন না কারণ identif শনাক্তকারীদের ক্ষেত্রে বৈধ নয়)) ভিবি 6 এবং এর আগে আপনি অবৈধ শনাক্তকারীদের (যেমন "টেবিল! [AB $" এড়াতে বন্ধনী ব্যবহার করতে পারেন) সিডি] "), কিন্তু যখন আমরা কীওয়ার্ডগুলি এড়ানোর জন্য বন্ধনী ব্যবহার শুরু করি, তখন আমরা এটি করার ক্ষমতা হারাতে পারি। অধিকাংশ ক্ষেত্রে,

প্রকৃত প্রযুক্তিগত পেতে, x! Y কাজ করে যদি x এর একটি ডিফল্ট সম্পত্তি থাকে যা স্ট্রিং বা অবজেক্টকে প্যারামিটার হিসাবে নেয়। সেক্ষেত্রে, x! Y কে x.DefaultProperty ("y") এ রূপান্তরিত করা হবে। একটি আকর্ষণীয় পার্শ্ব দ্রষ্টব্য হ'ল এই সমস্ত কাজটি করার জন্য ভাষার লেক্সিকাল ব্যাকরণে একটি বিশেষ নিয়ম রয়েছে। দ্য ! অক্ষরটি ভাষাতে টাইপ অক্ষর হিসাবেও ব্যবহৃত হয়, এবং প্রকারের অক্ষরগুলি অপারেটরগুলির আগে খাওয়া হয়। সুতরাং কোনও বিশেষ নিয়ম ছাড়াই, x! Y কে "x! Y" এর পরিবর্তে "x! Y" হিসাবে স্ক্যান করা হবে। ভাগ্যক্রমে, যেহেতু এককথায় দু'জন শনাক্তকারী বৈধ, সেই ভাষাতে কোনও স্থান নেই, আমরা কেবলমাত্র নিয়মটি চালু করেছিলাম যে যদি পরবর্তী চরিত্রটি পরে হয়! একটি শনাক্তকারী এর শুরু, আমরা বিবেচনা! অপারেটর হতে হবে এবং কোনও টাইপ চরিত্র নয়।


11
আমি তখন ইচ্ছাকৃতভাবে ভুলে যাওয়া সেই বৈশিষ্ট্যগুলির মধ্যে একটি এটি কয়েকটি কীস্ট্রোক সংরক্ষণ করে তবে আমার কোড হাইলাইট করে এবং পঠনযোগ্যতার সাথে মেস করে। আবার ঠিক ভুলে যাচ্ছি .... এখন
STW

3
আকর্ষণীয়, কিন্তু সত্যিই দরকারী নয়। ফলন কীওয়ার্ডের মতো অনুপস্থিত বৈশিষ্ট্যগুলি যুক্ত করার পরিবর্তে ভিবি টিম কি এই ধরণের জিনিসগুলির কাজ করে? : পি
মেটা-নাইট

5
এই বৈশিষ্ট্যটি ভিবি 3 (এএফআইকে) থেকে পিছিয়ে পড়া সামঞ্জস্যের জন্য বহন করা হয়েছে
এডুয়ার্ডো

1
কীড ইনডেক্স প্রয়োগ করে এমন ক্লাসগুলির কি তাদের একটি সাধারণ ইন্টারফেস রয়েছে যা থেকে উত্তরাধিকার সূত্রে প্রাপ্ত? আইকিয়েডের মতো একইভাবে ইন্টিজার ইনডেক্সড কনটেইনারগুলি আইইএন নাম্বারীয় কার্যকর করে?
মাসলো

2
এই বৈশিষ্ট্যটি ডাটাআরসের সাথে কাজ করে (যেমন ডাঃ! আইডি) যা লিনকিউ থেকে ডেটাসেটে খুব কার্যকর।
পল

19

এটি অন্তর্নির্মিত, এবং সি # এর একটি নির্দিষ্ট সুবিধা। একই নাম ব্যবহার না করেই একটি ইন্টারফেস পদ্ধতি প্রয়োগ করার ক্ষমতা।

যেমন:

Public Sub GetISCSIAdmInfo(ByRef xDoc As System.Xml.XmlDocument) Implements IUnix.GetISCSIInfo

End Sub

আমি নিশ্চিত যে আপনি সি # তে এরকম কিছু করতে পারেন। ভিবি.নেটে এটি সবেমাত্র বাধ্য, এবং সি # তে এটি alচ্ছিক?
জেস্পার ব্লেড জেনসেন

5
আপনি সাবটি ব্যক্তিগতও করতে পারেন, যা ইন্টারফেসের নন-জেনেরিক অবজ্ঞাত সংস্করণগুলিতে কলগুলির মতো জিনিসগুলি আড়াল করার দুর্দান্ত উপায়।
ক্রেগ গিডনি

3
এটি একটি ভাল ধারণা হতে পারে। ক্লাসিক উদাহরণটি হ'ল যদি আপনি এমন একটি পাবলিক ক্লোজ পদ্ধতি চান যা আইডিজোজেবলের জন্য আপনার নিষ্পত্তি বাস্তবায়ন হিসাবেও কাজ করে।
মার্কজে

1
যদি আপনি দুটি ইন্টারফেস প্রয়োগ করে যা কোনও পদ্ধতির নাম ভাগ করে দেয় তবে এটি বেশ কার্যকর।
এরিক নিকলসন

আমি এটি দেখেছি এবং সর্বদা ইচ্ছা করি আমি না থাকি। অনুমতি দেওয়া উচিত নয়।
ফাস্টএল

17

বাইওয়ালকে জোর করে

ভিবিতে, আপনি যদি আপনার যুক্তিগুলি অতিরিক্ত বন্ধনীগুলির সেটগুলিতে আবদ্ধ করেন তবে আপনি পদ্ধতির বাইরফ ঘোষণাকে ওভাররাইড করতে পারেন এবং এটিকে বাইওয়ালে পরিণত করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি 4,5,6 এর পরিবর্তে 4, 5, 5 উত্পাদন করে

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim R = 4
    Trace.WriteLine(R)
    Test(R)
    Trace.WriteLine(R)
    Test((R))
    Trace.WriteLine(R)
End Sub
Private Sub Test(ByRef i As Integer)
    i += 1
End Sub

প্রক্রিয়া কল দ্বারা আর্গুমেন্টটি সংশোধিত হচ্ছে না দেখুন - অন্তর্নিহিত পরিবর্তনশীল


6
ওহ আমার সদাচরণ ... এটি একটি উল্লেখযোগ্য বৈশিষ্ট্য, যদিও আমি মনে করি না যে আমি যদি এটি অন্য কারও কোডে পড়ি তবে এটি কী করছে তা আমি জানি না। এটি কী করছে তা জানার জন্য যদি আপনাকে মন্তব্য করতে হয় তবে আপনি সম্ভবত থ্রোটিকে পরিবর্তিত করে পরিবর্তে পরিবর্তন করতে পেরেছেন।
mattmc3

7
এটি আসলে প্রথম বন্ধনী ব্যবহারের একটি পার্শ্ব প্রতিক্রিয়া - প্যারেন্টেসিসগুলি কেবল একটি আইটেম হলেও এমনকি ভিতরে যা আছে তার একটি অস্থায়ী মান তৈরি করে। এই প্রভাবটি আমাকে ভিবি 6-তে হত্যা করেছে - সাব কলগুলি প্যারেন্স নেয় নি, তবে সি থেকে আগত আমি পেরেনকে ভিতরে রেখেছিলাম put.০ একাধিক পরামিতিগুলিতে উড়িয়ে দিয়েছিল, তবে একটি পরামিতি সহ, এটি আনন্দের সাথে একটি সাময়িক মানটি পাস করেছে এবং আমার সম্মানের প্রতিফলিত হয়েছিল 'byref'। ঘটেছিল প্রতি 3 বছর পরে, শেষ ঘটনাটি ভুলে যেতে আমার যে সময় লেগেছিল about
ফাস্টএল

16

নাম দিয়ে প্যারামিটারগুলি পাস করা এবং তাই তাদের পুনরায় অর্ডার করে

Sub MyFunc(Optional msg as String= "", Optional displayOrder As integer = 0)

    'Do stuff

End function

ব্যবহার:

Module Module1

    Sub Main()

        MyFunc() 'No params specified

    End Sub

End Module

যে কোনও ক্রমে ": =" পরামিতি বিশদটি ব্যবহার করেও বলা যেতে পারে:

MyFunc(displayOrder:=10, msg:="mystring")

বাহ, এটি দুর্দান্ত দুর্দান্ত! ওয়েব পরিষেবাদি ইত্যাদি ব্যবহার করার সময় আমি এটি দেখেছি কিন্তু আমি জানতাম না যে আপনি এটি কোনও ওল 'সাধারণ পদ্ধতিতে করতে পারেন।
রিচসি

2
আপনি যখন এমন কোনও পদ্ধতির মুখোমুখি হন যখন খুব বেশি আর্গুমেন্ট নেয় তখন অবশ্যই একটি খুব সহজ সরঞ্জাম tool আমি প্রতিটি প্যারামিটারের নাম দেওয়ার চেষ্টা করি এবং নিজের লাইনে নাম: = মান রাখি। > 5 (আমার থাম্বের নিয়ম) পরামিতিগুলি গ্রহণ করে এমন পদ্ধতির জন্য এটি অনেক বেশি স্বজ্ঞাত এবং পরিষ্কার।
এসটিডাব্লু 5'09

অফিস অটোমেশনের জন্য বিশেষত কার্যকর, যেখানে আপনাকে কয়েক ডজন optionচ্ছিক যুক্তি সহ পদ্ধতিগুলি মোকাবেলা করতে হবে।
মার্কজে

1
কী দুর্দান্ত তা আপনি দুটি মিশ্রন করতে পারেন : প্রয়োজনীয় প্যারামিটারগুলি ক্রমে নির্দিষ্ট করে শুরু করুন, তারপরে alচ্ছিক আর্গুমেন্টগুলির জন্য নামযুক্ত পরামিতিগুলিতে স্যুইচ করুন!
আরবেরি ইয়ং

15

ইউজিং স্টেটমেন্টটি ভিবি 8 হিসাবে নতুন, সি # টি শুরু থেকেই ছিল। এটি আপনার জন্য স্বয়ংক্রিয়ভাবে নিষ্পত্তি কল করে।

যেমন

Using lockThis as New MyLocker(objToLock)

End Using

23
এটি লক্ষ্য করার মতো (কেবলমাত্র আমি কমপক্ষে দুবার ভুলে গিয়েছি) যে আপনার কাছে কয়েকটি ব্যবহারযোগ্য বিবরণ মোড়ানো বেশ কয়েকটি ডিসপোজযোগ্য বস্তু থাকতে পারে। সিনট্যাক্সটি হ'ল "নতুন বস্তু হিসাবে অবজেক্ট ব্যবহার করা হচ্ছে, নতুন বস্তু হিসাবে বস্তু ...." একাধিক বাসা বাঁধার চেয়ে এটি অনেক পরিষ্কার।
এসটিডাব্লু

অবশ্যই আমার প্রিয় এক।
স্যাম অ্যাক্স

14

আমদানির উপকরণগুলিও মূলত অজানা:

Import winf = System.Windows.Forms

''Later
Dim x as winf.Form

1
আমি আমাদের একই ধারণা ছিল বলে মনে করি।
ক্রিসি 1

3
@ বুবু - এখানে একটি সাধারণ উদাহরণ যেখানে আমদানি নামগুলি খারাপ নয়। stackoverflow.com/questions/92869/...
torial

ঠিক আছে - অপব্যবহারের একটি সুস্পষ্ট সুযোগ আছে, তবে @ টিউরিয়াল এর কৌতুক নির্বিশেষে এটি দুর্দান্ত বৈশিষ্ট্য। প্রতিবার আমি সিস্টেম.সামগ্রহ অন্তর্ভুক্ত করি। নিয়মিত এক্সপ্রেসন আমি "গ্রুপ" শ্রেণীর সাথে নাম সংঘর্ষের ঝুঁকি নিয়ে থাকি কারণ এটি একটি সাধারণ শ্রেণীর নাম। উপনামটি আপনাকে দ্বিধাবিভক্ত ক্লাসগুলি পুরোপুরি যোগ্যতা অর্জন করতে এড়াতে দেয় যা একটি বিশাল সময় সাশ্রয়কারী এবং সঠিকভাবে ব্যবহৃত হওয়ার সময় পাঠযোগ্যতা বাড়ায় । বৈশিষ্ট্যটি দুর্দান্ত, তবে আপনার নির্দিষ্ট উদাহরণটি কিছু উপহাসকে আমন্ত্রণ জানায় - দুঃখের সাথে দুঃখিত।
mattmc3

14

নিম্নলিখিত ইভেন্টের ঘোষণাটি বিবেচনা করুন

Public Event SomethingHappened As EventHandler

সি # তে, আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে ইভেন্ট গ্রাহকদের জন্য চেক করতে পারেন:

if(SomethingHappened != null)
{
  ...
}

তবে ভিবি.এনইটি সংকলক এটি সমর্থন করে না। এটি আসলে একটি লুকানো ব্যক্তিগত সদস্য ক্ষেত্র তৈরি করে যা ইন্টেলিজেন্সে দৃশ্যমান নয়:

If Not SomethingHappenedEvent Is Nothing OrElse SomethingHappenedEvent.GetInvocationList.Length = 0 Then
...
End If

অধিক তথ্য:

http://jelle.druyts.net/2003/05/09/BehindTheScenesOfEventsInVBNET.aspx http://blogs.msdn.com/vbteam/archive/2009/09/25/testing-events- for- কিছুই-না- ডুগ -rothaus.aspx


আপনি কি কখনও এটি করতে চান? আমি কোনও ব্যবহারের ক্ষেত্রে কল্পনা করতে পারি না যেখানে আপনাকে ভিবিতে কোনও ইভেন্টের গ্রাহকদের সংখ্যা জানতে হবে।
কনরাড রুডলফ

নির্দিষ্ট পরিস্থিতিতে, যদি আপনি ইভেন্টটি উত্থাপন করেন এবং কোনও হ্যান্ডলার নেই তবে সি # একটি ব্যতিক্রম ছুঁড়ে। ভিবি.নেট করবে না। সুতরাং চেক করা প্রয়োজন।
জোয়েল কোহোর্ন

2
আমি এটি কোনও ব্যবসায়িক অবজেক্ট ইভেন্টের জন্য ব্যবহার করেছি যা গ্রাহকদের কাছে বৈধতা ত্রুটি বার্তা উত্থাপন করেছে। আমি ইভেন্টটি পরিচালনা করা হচ্ছে কিনা তা যাচাই করতে চেয়েছিলাম যাতে আমি জানতাম যে বৈধতা ত্রুটিগুলি প্রাপ্ত হচ্ছে। অন্যথায়, আমি ব্যবসায়ের জিনিস একটি ব্যতিক্রম নিক্ষেপ ছিল।
টেকনোবেবল

2
এই ব্যক্তিগত সদস্যের জন্য আর একটি সহজ ব্যবহার হ'ল ইভেন্টের অনুরোধের তালিকাটি পাওয়া। আমি ইভেন্টটিকে সমস্ত আহ্বানকারীদের কাছে একটি অ্যাসিঙ্ক পদ্ধতিতে ফায়ার করার জন্য এটি বেশ কয়েকটি ক্ষেত্রে ব্যবহার করেছি (শ্রোতা বি এটি গ্রহণের আগে শ্রোতা এটিকে ইভেন্টটি পরিবর্তন করতে বাধা দেয়; এছাড়াও এটি শ্রোতাদের এ সরবরাহকারীকে শ্রোতার বি তে বিলম্বিত হতে বাধা দেয়)। আমি এটি কাস্টম ডেটা সিঙ্কের দৃশ্যে এবং এপিআইতে ব্যবহার করেছি।
এসটিডাব্লু 5'09

14

কোনও কীওয়ার্ডের সাথে মেলে ধরতে যদি আপনার একটি ভেরিয়েবলের প্রয়োজন হয় তবে এটি বন্ধনীর সাহায্যে বন্ধ করুন। NEC না। যদিও সেরা অনুশীলন - তবে এটি বিজ্ঞতার সাথে ব্যবহার করা যেতে পারে।

যেমন

Class CodeException
Public [Error] as String
''...
End Class

''later
Dim e as new CodeException
e.Error = "Invalid Syntax"

উদাহরণস্বরূপ মন্তব্যসমূহ থেকে উদাহরণ (@ পন্টিডাম):

Class Timer
Public Sub Start()
''...
End Sub

Public Sub [Stop]()
''...
End Sub

আমি মনে করি এই উদাহরণটি আরও ভাল হবে যদি আপনি উদাহরণ কীওয়ার্ড হিসাবে "যদি" ব্যবহার না করেন।
শন গফ

4
টাইমআর স্টার্ট এবং টাইমর.এর ভাল ব্যবহারের উদাহরণ হিসাবে মনে রাখা বন্ধ করুন বসন্ত
প্যানডিডাম

5
এটি অস্বীকার করার সাথে সাথে নির্দেশ করার জন্য +1। বেশ কয়েকটি ফ্রেমওয়ার্ক ক্লাস রয়েছে যা সঠিকভাবে সমাধানের জন্য এটির প্রয়োজন, যেমন [সমাবেশ]
এসটিডব্লিউ

5
[এনাম] এমন একটি মামলার আর একটি ভাল উদাহরণ যেখানে কীওয়ার্ডের পরিবর্তে ক্লাসটি ব্যবহার করার জন্য আপনার বন্ধনী প্রয়োজন need
রায়ান লুন্ডি

13

এক্সএমএল লিটারালগুলি সম্পর্কে বেশ কয়েকটি উত্তর রয়েছে তবে এই নির্দিষ্ট ক্ষেত্রেটি সম্পর্কে নয়:

স্ট্রিং লিটারালগুলি আবদ্ধ করতে আপনি এক্সএমএল লিটারালগুলি ব্যবহার করতে পারেন যা অন্যথায় পালাতে হবে। স্ট্রিং লিটারেলগুলিতে উদাহরণস্বরূপ ডাবল-কোটস থাকে।

এর পরিবর্তে:

Dim myString = _
    "This string contains ""quotes"" and they're ugly."

তুমি এটি করতে পারো:

Dim myString = _
    <string>This string contains "quotes" and they're nice.</string>.Value

আপনি সিএসভি পার্সিংয়ের জন্য আক্ষরিক পরীক্ষা করলে এটি বিশেষত কার্যকর:

Dim csvTestYuck = _
    """Smith"", ""Bob"", ""123 Anywhere St"", ""Los Angeles"", ""CA"""

Dim csvTestMuchBetter = _
    <string>"Smith", "Bob", "123 Anywhere St", "Los Angeles", "CA"</string>.Value

(আপনাকে <string>অবশ্যই ট্যাগটি ব্যবহার করতে হবে না; আপনি নিজের পছন্দ মতো যে কোনও ট্যাগ ব্যবহার করতে পারেন))


3
<q>পার্ল / রুবির ব্যবহারের মতো একটি ভাল ট্যাগ হবে। যাইহোক, এটি বেশ সুন্দর প্রতিমা। পছন্দ করি!
কনরাড রুডল্ফ

কি প্রতিভা ধারণা। আপনাকে ধন্যবাদ
জেরেমি

12

ডেটটাইম আপনার # তারিখকে ঘিরে ধরে আরম্ভ করা যেতে পারে

Dim independanceDay As DateTime = #7/4/1776#

আপনি এই সিনট্যাক্সের সাথে টাইপ অনুমিত ব্যবহার করতে পারেন

Dim independanceDay = #7/4/1776#

এটি কনস্ট্রাক্টর ব্যবহার করার চেয়ে অনেক সুন্দর

Dim independanceDay as DateTime = New DateTime(1776, 7, 4)

6
আপনার যদি বিকল্প
স্ট্রাইক

12

আপনার কেবল একটি লাইনে 2 লাইনের কোড থাকতে পারে। অত: পর:

Dim x As New Something : x.CallAMethod

ওহো ... আমি ভেবেছিলাম এটি কেবলমাত্র ডাব্লু / শ্রেণি এবং উত্তরাধিকার
জেসন

ভুলে যাবেন নাCall (New Something).CallAMethod()
জোনাথন অ্যালেন

এটি অ্যাপলের এমএস-বেসিকের একটি হোল্ডভার []! আমার দোকানে আমি গোটোস ব্যবহারের জন্য ঠিক তামাশা করব: - /
ফাস্টএল

বেশিরভাগ সময় এড়াতে হয় তবে যেখানে আমি এটি ব্যবহার করতে পছন্দ করি সে ক্ষেত্রে বিবৃতিগুলি যেখানে লাইনগুলি খুব কম থাকে উদাহরণস্বরূপ কেস 4: x = 22
ডুইডেল

11

.চ্ছিক পরামিতি

বিকল্পগুলি নতুন ওভারলোডগুলি তৈরি করার চেয়ে অনেক সহজ, যেমন:

Function CloseTheSystem(Optional ByVal msg AS String = "Shutting down the system...")
   Console.Writeline(msg)
   ''//do stuff
End Function

1
আমি জানতাম না যে সি # তাদের পেতে চলেছে। এগুলি দুর্দান্ত, তবে আপনি কেবল সেগুলি ব্যবহারের ক্ষেত্রে সতর্কতা অবলম্বন করতে হবে যেখানে আপনি নিশ্চিত হন যে কোডটি সি # দ্বারা গ্রাস করা হবে না কারণ এটি তাদের সমর্থন করে না। FxCop / Code বিশ্লেষণ পরিবর্তে পদ্ধতিটি ওভারলোড করতে আপনাকে বলবে।
এসটিডাব্লু 5'09

... আমি কেবলমাত্র codeচ্ছিক পরামিতিগুলির জন্য দুর্দান্ত ব্যবহার পেয়েছি, যখন তাদের এখনও প্রোডাকশন কোড থেকে দূরে রাখছে। আমি লিখেছি-আপ একটি সংক্ষিপ্ত পোস্ট এটি সম্পর্কে আমার সাইটে: yoooder.com/wordpress/?p=62
অগভীর নলকুপ

2
আহা, আমি এটিকে অনেক তুচ্ছ করি ... তবে অফিস অটোমেশনের জন্য দরকারী
নাচ 2 ডি

9

VB.Net এ শিরোনাম কেস একটি পুরানো VB6 fxn দ্বারা অর্জন করা যেতে পারে:

StrConv(stringToTitleCase, VbStrConv.ProperCase,0) ''0 is localeID

1
এটি টেক্সটিনফো ক্লাসেও রয়েছে। না নিশ্চিত নামস্থান মধ্যে যে সম্ভবত system.text।
শন

আপনি নেট নেটওয়ার্ক নিরপেক্ষ হতে আরও ভাল এবং টুটিটেলকে রূপান্তর করতে বিশ্বায়ন পাঠ্য ইনফো ক্লাস ব্যবহার করুন। আপনার কোডটি যদি কখনও সি # তে রূপান্তরিত হওয়া দরকার হয় আপনার কাছে মাইক্রোসফ্টের দরকার অনেকগুলি ছোট ছোট নাস্তি রয়েছে is ভিজুয়ালবাসিক
জেরেমি

9

পরামিতি সহ সম্পত্তি

আমি কিছু সি # প্রোগ্রামিং করে চলেছি, এবং এমন একটি বৈশিষ্ট্য আবিষ্কার করেছি যা ভিবি ডট নেট অনুপস্থিত ছিল, তবে এখানে উল্লেখ করা হয়নি।

কীভাবে এটি করা যায় তার উদাহরণ (পাশাপাশি সি # সীমাবদ্ধতা) এখানে দেখা যাবে: প্যারামিটার সহ সি # তে সাধারণত গেট সেট বৈশিষ্ট্য ব্যবহার করে

আমি এই উত্তরটি থেকে কোডটি উদ্ধৃত করেছি:

Private Shared m_Dictionary As IDictionary(Of String, Object) = _
             New Dictionary(Of String, Object)

Public Shared Property DictionaryElement(ByVal Key As String) As Object
    Get
        If m_Dictionary.ContainsKey(Key) Then
            Return m_Dictionary(Key)
        Else
            Return [String].Empty
        End If
    End Get
    Set(ByVal value As Object)
        If m_Dictionary.ContainsKey(Key) Then
            m_Dictionary(Key) = value
        Else
            m_Dictionary.Add(Key, value)
        End If

    End Set
End Property

এটি আকর্ষণীয়, তবে এটি কোথায় কার্যকর হবে তা আমি পুরোপুরি নিশ্চিত নই। myObj.Something ("abc") দেখে মনে হচ্ছে আপনি কোনও সম্পত্তির চেয়ে কোনও ফাংশনে অ্যাক্সেস করছেন। এটি আপনাকে কী কিনে তা নিশ্চিত নয়।
mattmc3

আমি অস্পষ্টতাকে ঘৃণা করি। এটা কি হওয়া উচিত। একটি পদ্ধতি, বা একটি সম্পত্তি। কিছু রিফ্যাক্টরিং সরঞ্জাম নির্দিষ্ট পরিস্থিতিতে উভয় তৈরি করার পরামর্শ দেয়, দেখে মনে হয় তারা এমনকি জানে না ...
brumScouse
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.