আপনি কীভাবে সি # তে alচ্ছিক পরামিতি ব্যবহার করতে পারেন?


492

দ্রষ্টব্য: এই প্রশ্নটি এমন সময়ে জিজ্ঞাসা করা হয়েছিল যখন সি # এখনও alচ্ছিক প্যারামিটারগুলি সমর্থন করে না (যেমন সি # 4 এর আগে)।

আমরা একটি ওয়েব এপিআই তৈরি করছি যা একটি সি # শ্রেণি থেকে প্রোগ্রামগতভাবে তৈরি। বর্গ পন্থা নেই GetFooBar(int a, int b)এবং API একটি পদ্ধতি রয়েছে GetFooBarমতো ক্যোয়ারী প্যারাম গ্রহণ &a=foo &b=bar

ক্লাসগুলির optionচ্ছিক পরামিতিগুলি সমর্থন করা দরকার, যা সি # ভাষায় সমর্থিত নয়। সেরা পদ্ধতির কি?


7
অথবা ওয়েট ইউনিটিল সি # 4.0 প্রকাশিত হয়। Ptionচ্ছিক পরামিতি সমর্থিত।
মিকাহ

উত্তর:


1053

অবাক বিস্মিত কেউ সি # 4.0 alচ্ছিক প্যারামিটারগুলি উল্লিখিত করেনি যা এইভাবে কাজ করে:

public void SomeMethod(int a, int b = 0)
{
   //some code
}

সম্পাদনা: আমি জানি যে প্রশ্নটি জিজ্ঞাসা করা হয়েছিল তখন সি # 4.0 এর অস্তিত্ব ছিল না। তবে এই প্রশ্নটি এখনও "সি # alচ্ছিক যুক্তি" এর জন্য গুগলে 1 নম্বর রয়েছে তাই আমি ভেবেছিলাম - এই উত্তরটি এখানে থাকা উচিত। দুঃখিত।


58
প্রশ্নটি জিজ্ঞাসা করার সময়, সি # 4.0 উপস্থিত ছিল না।
ফরেস্ট মার্ভেজ

91
হ্যাঁ, এটিকে উপেক্ষা করেছেন, দুঃখিত। তবে এই প্রশ্নটি এখনও গুগলটিতে "সি # alচ্ছিক যুক্তি" এর জন্য এখনও 1-র স্থান পেয়েছে - এই উত্তরটি এখানে পাওয়া উচিত :)
অ্যালেক্স

45
আপ টু ডেট তথ্য সরবরাহ করার জন্য আপনার পক্ষে ভাল Good আদর্শভাবে মূল উত্তরগুলি C # 4.0 এর মতো বর্তমান তথ্যের সাথে আপডেট করা হবে। আমি বিশ্বাস করি যে এসও ছেলেরা মূলত উইকি মানসিকতার মনে পড়েছিল, তবে অন্য কারও উত্তর সম্পাদনা করতে সকলেই কিছুটা ভয় পান।
রোয়ান

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

4
এটি লক্ষণীয় যে সমস্ত nonচ্ছিক পরামিতিগুলির পরে alচ্ছিক পরামিতিগুলি অবশ্যই স্থাপন করা উচিত। উদাহরণস্বরূপ আপনার সর্বজনীন শূন্যতা থাকতে পারে না সামমথোড (ইন্ট বি = 0, ইন্ট এ)
অ্যান্ড্রু মেজারি

129

আরেকটি বিকল্প হ'ল প্যারাম কীওয়ার্ড ব্যবহার করা

public void DoSomething(params object[] theObjects)
{
  foreach(object o in theObjects)
  {
    // Something with the Objects…
  }
}

বলা হয় ...

DoSomething(this, that, theOther);

57
এই উত্তরটি 10 ​​লাইনে
বিউটিফিলি কী

1
ধন্যবাদ! এটি আমাকে একটি সরল (আমার বর্তমান ব্যবহারের ক্ষেত্রে) লগিং ফাংশন লিখতে অনুপ্রাণিত করেছে: public void log (params object[] args){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < args.Length; i++){ sb.Append("{"); sb.Append(i.ToString()); sb.Append("}"); sb.Append(" "); } String.Format(sb.ToString(),args).Dump(); }নমুনা কল:log("...Done,",(watch.ElapsedMilliseconds/1000).ToString(),"s");
pfonseca

আপনি উল্লেখ করতে পারেন, নেট 3.5 কি এটি সমর্থন করে? সরকারী ডকস এটি উল্লেখ করেনি।
টুডো

@ টি টুডোয়া - আপনি এখানে যা জিজ্ঞাসা করছেন তা আমি 100% নিশ্চিত নই - ডটনেট ফ্রেমওয়ার্ক 3.5 এ সি # ভি 3.0 অন্তর্ভুক্ত করেছে - সংস্করণ 3.0 প্যারাম কীওয়ার্ডটি সমর্থন করেছে, তবে সি # ভি 4.0 তে প্রবর্তিত optionচ্ছিক প্যারামিটারগুলি নেই , যা ডটনেট ফ্রেমওয়ার্ক 4.0
টিম জার্ভিস

@ টিমজারভিস হ্যাঁ, আমিই তাকে জিজ্ঞাসা করছিলাম। tnx
টুডো

77

সি # তে, আমি সাধারণত পদ্ধতির একাধিক ফর্ম ব্যবহার করব:

void GetFooBar(int a) { int defaultBValue;  GetFooBar(a, defaultBValue); }
void GetFooBar(int a, int b)
{
 // whatever here
}

আপডেট: এটি উপরে উল্লিখিত ছিল যে আমি সি # 2.0 এর সাথে ডিফল্ট মানগুলি করেছি। আমি এখন যে প্রকল্পগুলিতে কাজ করছি সেগুলি সি # 4.0 ব্যবহার করছে যা এখন সরাসরি alচ্ছিক পরামিতিগুলিকে সমর্থন করে। আমি স্রেফ নিজের কোডে ব্যবহার করেছি এমন একটি উদাহরণ এখানে দেওয়া হয়েছে:

public EDIDocument ApplyEDIEnvelop(EDIVanInfo sender, 
                                   EDIVanInfo receiver, 
                                   EDIDocumentInfo info,
                                   EDIDocumentType type 
                                     = new EDIDocumentType(EDIDocTypes.X12_814),
                                   bool Production = false)
{
   // My code is here
}

1
আমি বিশ্বাস করি আপনি ডিফল্ট প্যারামিটারগুলিতে কনস্ট্রাক্টরদের কল করতে পারবেন না, তাদের "সংকলন-সময়" সামঞ্জস্যপূর্ণ হওয়া দরকার, "রান-টাইম" নয় ... বা আমি ভুল করছি?
অ্যালেক্স

45

এই সাইট থেকে:

http://www.tek-tips.com/viewthread.cfm?qid=1500861&page=1

সি # [ptionচ্ছিক] বৈশিষ্ট্য (ভিবি থেকে, যদিও সি # তে কার্যকর নয়) ব্যবহারের অনুমতি দেয়। সুতরাং আপনার মতো একটি পদ্ধতি থাকতে পারে:

using System.Runtime.InteropServices;
public void Foo(int a, int b, [Optional] int c)
{
  ...
}

আমাদের এপিআই মোড়কে, আমরা alচ্ছিক প্যারামিটারগুলি সনাক্ত করি (প্যারামিটারআইএনফো p.IsOptional) এবং একটি ডিফল্ট মান সেট করে। প্যারামিটারের নামটিতে "alচ্ছিক" থাকার মতো ক্লাদগুলি অবলম্বন না করে প্যারামিটারগুলি asচ্ছিক হিসাবে চিহ্নিত করা।


4
তবে কীভাবে Foo ফাংশনটি ব্যবহার করবেন? ফু (1,1); ফু (1,1, নাল) এবং ফু (1,1, অনুপস্থিত মূল্য) সমস্ত ব্যতিক্রম ছুঁড়ে ফেলবে
বলু

2
আজব, উপরের কিছু উত্তর এর চেয়ে আরও ভাল।
মাইদোট

26

আপনি পদ্ধতি ওভারলোডিং ব্যবহার করতে পারেন ...

GetFooBar ()
গেটফুবার (পূর্বপক্ষে)
গেটফুবার (ইনট্রি, ইনট বি)

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

আপনি নলেবল প্রকারগুলি ব্যবহার করতে পারেন ...

গেটফুবার (ইনট্রি? এ, ইনট? বি)

আপনি প্যারামিটার সেট করা আছে কিনা তা দেখতে, a.HasValue ব্যবহার করে চেক করতে পারেন could

আর একটি বিকল্প হ'ল 'প্যারাম' পরামিতি ব্যবহার করা।

গেটফুবার (প্যারামগুলি অবজেক্ট [] আরগস)

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


24

আপনি কোনও উদ্বেগ ছাড়াই সি # 4.0 এ alচ্ছিক পরামিতি ব্যবহার করতে পারেন। আমাদের মতো পদ্ধতি থাকলে:

int MyMetod(int param1, int param2, int param3=10, int param4=20){....}

আপনি যখন পদ্ধতিটি কল করেন, আপনি এই জাতীয় প্যারামিটারগুলি এড়িয়ে যেতে পারেন:

int variab = MyMethod(param3:50; param1:10);

সি # 4.0 "নামকরণের প্যারামিটার" নামে একটি বৈশিষ্ট্য প্রয়োগ করে, আপনি প্রকৃতপক্ষে তাদের নামগুলি দিয়ে প্যারামিটারগুলি পাস করতে পারেন, এবং অবশ্যই আপনি যা চান ক্রমে প্যারামিটারগুলি পাস করতে পারেন :)


20

হ্যালো alচ্ছিক বিশ্ব

আপনি যদি রানটাইমটিকে ডিফল্ট প্যারামিটার মান সরবরাহ করতে চান তবে কল করার জন্য আপনাকে প্রতিবিম্বটি ব্যবহার করতে হবে। এই প্রশ্নের অন্যান্য পরামর্শগুলির মতো সুন্দর নয়, তবে ভিবি.এনইটি-র সাথে সামঞ্জস্যপূর্ণ।

using System;
using System.Runtime.InteropServices;
using System.Reflection;

namespace ConsoleApplication1
{
    class Class1
    {
        public static void sayHelloTo(
            [Optional,
            DefaultParameterValue("world")] string whom)
        {
            Console.WriteLine("Hello " + whom);
        }

        [STAThread]
        static void Main(string[] args)
        {
            MethodInfo mi = typeof(Class1).GetMethod("sayHelloTo");
            mi.Invoke(null, new Object[] { Missing.Value });
        }
    }
}

16

একটি সহজ উপায় যা আপনি বাদ করতে পারবেন কোন পরামিতি মধ্যে কোনো অবস্থান , সুবিধা নিচ্ছে nullable ধরনের নিম্নরূপ:

public void PrintValues(int? a = null, int? b = null, float? c = null, string s = "")
{
    if(a.HasValue)
        Console.Write(a);
    else
        Console.Write("-");

    if(b.HasValue)
        Console.Write(b);
    else
        Console.Write("-");

    if(c.HasValue)
        Console.Write(c);
    else
        Console.Write("-");

    if(string.IsNullOrEmpty(s)) // Different check for strings
        Console.Write(s);
    else
        Console.Write("-");
}

স্ট্রিংগুলি ইতিমধ্যে স্বল্প প্রকারের তাই তাদের দরকার নেই ?

আপনার এই পদ্ধতিটি একবার হয়ে গেলে, নিম্নলিখিত কলগুলি সমস্ত বৈধ :

PrintValues (1, 2, 2.2f);
PrintValues (1, c: 1.2f);
PrintValues(b:100);
PrintValues (c: 1.2f, s: "hello");
PrintValues();

আপনি যখন কোনও পদ্ধতিটি সংজ্ঞায়িত করেন তখন নামকরণের মাধ্যমে আপনার পছন্দের পরামিতিগুলি সেট করার স্বাধীনতা থাকে । নামযুক্ত এবং alচ্ছিক পরামিতিগুলির বিষয়ে আরও তথ্যের জন্য নীচের লিঙ্কটি দেখুন:

নামযুক্ত এবং ptionচ্ছিক যুক্তি (সি # প্রোগ্রামিং গাইড) @ এমএসডিএন


9

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

public void Foo(int a, int b, int? c)
{
  if(c.HasValue)
  {
    // do something with a,b and c
  }
  else
  {
    // do something with a and b only
  }  
}

যদিও +1 উপদেশের শব্দ। এটি সত্যিই অগোছালো হয়ে যেতে পারে বলে এটিকে অভ্যাস তৈরি করবেন না।
মহেনরিকসন

7

alচ্ছিক পরামিতিগুলি পদ্ধতিগুলির জন্য। আপনার যদি কোনও শ্রেণীর জন্য alচ্ছিক যুক্তিগুলির প্রয়োজন হয় এবং আপনি হলেন:

  • সি # 4.0 ব্যবহার করে: ক্লাসের কনস্ট্রাক্টারে alচ্ছিক যুক্তিগুলি ব্যবহার করুন, এটি আমার পছন্দ মতো একটি সমাধান, যেহেতু এটি পদ্ধতিগুলির সাথে কী করা হয় তার কাছাকাছি, তাই মনে রাখা সহজ। এখানে একটি উদাহরণ:

    class myClass
    {
        public myClass(int myInt = 1, string myString =
                               "wow, this is cool: i can have a default string")
        {
            // do something here if needed
        }
    }
  • সি # 4.0 এর আগের সি # সংস্করণ ব্যবহার করে: আপনার কনস্ট্রাক্টর চেইনিং ব্যবহার করা উচিত (এটি: এই কীওয়ার্ডটি ব্যবহার করে), যেখানে সরল নির্মাতারা "মাস্টার কনস্ট্রাক্টর" বাড়ে। উদাহরণ:

    class myClass
    {
        public myClass()
        {
        // this is the default constructor
        }
    
        public myClass(int myInt)
            : this(myInt, "whatever")
        {
            // do something here if needed
        }
        public myClass(string myString)
            : this(0, myString)
        {
            // do something here if needed
        }
        public myClass(int myInt, string myString)
        {
            // do something here if needed - this is the master constructor
        }
    }

3

স্টিফেন হিসাবে উল্লিখিত পদ্ধতিতে এটি সি # তে পরিচালনা করা হয় পদ্ধতিটি ওভারলোড। বিভিন্ন পরামিতিগুলির সাথে পদ্ধতির একাধিক সংস্করণ তৈরি করে আপনি কার্যকরভাবে alচ্ছিক পরামিতিগুলি তৈরি করেন। কম প্যারামিটার সহ ফর্মগুলিতে আপনি সাধারণত সেই পদ্ধতিতে কলটিতে আপনার ডিফল্ট মানগুলি সেট করে সমস্ত পরামিতি দিয়ে পদ্ধতির ফর্মটিকে কল করবেন।


2

আপনি আপনার পদ্ধতিটি ওভারলোড করতে পারেন। একটি পদ্ধতিতে একটি প্যারামিটার থাকে GetFooBar(int a)এবং অন্যটিতে উভয় পরামিতি থাকে,GetFooBar(int a, int b)


2

ওভারলোডগুলি ব্যবহার করে বা সি # 4.0 বা তার বেশি ব্যবহার করুন

 private void GetVal(string sName, int sRoll)
 {
   if (sRoll > 0)
   {
    // do some work
   }
 }

 private void GetVal(string sName)
 {
    GetVal("testing", 0);
 }

1

বৃহত সংখ্যক alচ্ছিক পরামিতিগুলির জন্য, অভিধানের একটি একক প্যারামিটার কনটেনস্কি পদ্ধতিতে ব্যবহার করা যেতে পারে। আমি এই পদ্ধতির পছন্দ করি কারণ এটি সম্পূর্ণ অন্য পদ্ধতি তৈরি না করে আমাকে আলাদা আলাদাভাবে একটি তালিকা বা একটি টি পাস করার অনুমতি দেয় (উদাহরণস্বরূপ, ফিল্টার হিসাবে প্যারামিটারগুলি ব্যবহার করতে হয় তবে দুর্দান্ত))

উদাহরণ (নতুন অভিধান <স্ট্রিং, অবজেক্ট> () noচ্ছিক পরামিতিগুলি পছন্দ না হলে পাস করা হবে):

public bool Method(string ParamA, Dictionary<string,Object> AddlParams) {
    if(ParamA == "Alpha" && (AddlParams.ContainsKey("foo") || AddlParams.ContainsKey("bar"))) {
        return true;
    } else {
        return false;
    }
}

0

ডিফল্ট প্যারামিটারগুলির পরিবর্তে, কেন কেবল পাসওয়ার্ডিং পাস করা শব্দকোষ থেকে একটি অভিধান বর্গ তৈরি করবেন না .. এমন একটি বাস্তবায়ন যা এসপ নেটওয়ার্ড ক্যোরিস্ট্রিংয়ের সাথে কাজ করার মতো প্রায় একই রকম।

যেমন অনুরোধ.কোয়ারিস্ট্রিং ["এ"]

এটি কারখানা / বয়লারপ্লেট কোড থেকে পাতার শ্রেণিটি ডিকুয়াল করবে।


আপনি এএসপি.এনইটি দিয়ে ওয়েব পরিষেবাদিগুলিও দেখতে চাইতে পারেন । ওয়েব পরিষেবাদি সি # ক্লাসে অ্যাট্রিবিউটসের মাধ্যমে স্বয়ংক্রিয়ভাবে উত্পন্ন একটি ওয়েব এপিআই।


0

পার্টিতে কিছুটা দেরি হলেও আমি এই প্রশ্নের উত্তর খুঁজছিলাম এবং শেষ পর্যন্ত এটি করার আরও একটি উপায় বের করেছিলাম ured আপনার ওয়েব পদ্ধতির alচ্ছিক আরোগুলির জন্য XMLNode টাইপ হওয়ার জন্য ডেটা প্রকারগুলি ঘোষণা করুন। Alচ্ছিক আরগটি বাদ দিলে এটি বাতিল হয়ে যাবে এবং এটি উপস্থিত থাকলে আপনি আর্গ কল করে স্ট্রিংয়ের মান পেতে পারেন V ভ্যালু, অর্থাৎ,

[WebMethod]
public string Foo(string arg1, XmlNode optarg2)
{
    string arg2 = "";
    if (optarg2 != null)
    {
        arg2 = optarg2.Value;
    }
    ... etc
}

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


3
এগুলি নালাগুলি ধরণের ব্যবহারের চেয়ে ভাল?
কर्क ব্রডহર્স্ট

0

আমার কাছে লিখতে একটি ওয়েব পরিষেবা আছে যা 7 পরামিতি নেয়। প্রতিটি হ'ল এই ওয়েব পরিষেবাদি দ্বারা আবৃত একটি স্কেল বিবৃতিতে alচ্ছিক ক্যোয়ারী বৈশিষ্ট্য। তাই অ-alচ্ছিক প্যারাম থেকে দুটি কাজের ক্ষেত্র মাথায় আসে ... উভয়ই দরিদ্র:

মেথড 1 (প্যারাম 1, প্যারাম 2, প্যারাম 3, প্যারাম 4, পরম 5, প্যারাম 6, প্যারাম 7) মেথড 1 (প্যারাম 1, প্যারাম 2, প্যারাম 3, প্যারাম 4, প্যারাম 5, প্যারাম 6) মেথড 1 (প্যারাম 1, প্যারাম 2, প্যারাম 3, প্যারাম 4, প্যারাম 5, প্যারাম 7 ) ... ছবিটি দেখতে শুরু করুন। এইভাবে পাগলামি মিথ্যা। উপায় অনেক সংমিশ্রণ।

এখন সরল উপায়ে যা বিশ্রী দেখায় তবে কাজ করা উচিত: পদ্ধতি 1 (প্যারাম 1, বুল ইউজ পারম 1, প্যারাম 2, বুল ইউজ পারাম 2, ইত্যাদি ...)

এটি একটি পদ্ধতি কল, সমস্ত পরামিতিগুলির জন্য মানগুলি প্রয়োজন এবং এটি এর ভিতরে প্রতিটি কেস পরিচালনা করবে। এটি ইন্টারফেস থেকে কীভাবে ব্যবহার করবেন তাও পরিষ্কার।

এটি একটি হ্যাক, তবে এটি কার্যকর হবে।


2
এ কারণেই নালযোগ্য পরামিতি বিদ্যমান।
কर्क ব্রডহર્স্ট

0

আমাকে এটি একটি ভিবি.নেট ২.০ ওয়েব পরিষেবাতে করতে হয়েছিল। আমি প্যারামিটারগুলি স্ট্রিং হিসাবে নির্দিষ্ট করে শেষ করেছি, তারপরে আমার যা যা প্রয়োজন তা রূপান্তরিত করে। একটি alচ্ছিক পরামিতি একটি খালি স্ট্রিং সহ নির্দিষ্ট করা হয়েছিল। সবচেয়ে পরিষ্কার সমাধান নয়, তবে এটি কার্যকর হয়েছে। কেবল সতর্কতা অবলম্বন করুন যে আপনি যে সমস্ত ব্যতিক্রম ঘটতে পারে তা ধরেন।


0

কেবলমাত্র যদি কেউ alচ্ছিক delegateপ্যারামিটার হিসাবে কলব্যাক (বা ) পাস করতে চান তবে এটি এইভাবে করতে পারেন।

Ptionচ্ছিক কলব্যাক পরামিতি:

public static bool IsOnlyOneElement(this IList lst, Action callbackOnTrue = (Action)((null)), Action callbackOnFalse = (Action)((null)))
{
    var isOnlyOne = lst.Count == 1;
    if (isOnlyOne && callbackOnTrue != null) callbackOnTrue();
    if (!isOnlyOne && callbackOnFalse != null) callbackOnFalse();
    return isOnlyOne;
}

0

alচ্ছিক পরামিতিগুলি ডিফল্ট পরামিতি ছাড়া আর কিছুই নয়! আমি আপনাকে উভয়কে ডিফল্ট পরামিতি দেওয়ার পরামর্শ দিই। গেটফুবার (ইন আঃ 0, ইনট বি = 0) যদি আপনার কোনও ওভারলোডেড পদ্ধতি না থাকে তবে আপনি যদি কোনও মান পাস না করেন তবে একটি = 0, বি = 0 হবে, যদি আপনি 1 মান পাস করেন তবে ফলাফল হবে , a, 0 এর জন্য পাসকৃত মান এবং আপনি 2 টি মান পাস করলে 1 ম প্রথম এবং একটিতে দ্বিতীয় নির্ধারিত হবে।

আশা করি এটাই তোমার প্রশ্নের উত্তর.


0

ক্ষেত্রে যখন ডিফল্ট মানগুলি alচ্ছিক প্যারামিটার যুক্ত করার উপায় উপলব্ধ না হয় তখন ব্যবহার করা হয়। নেট অপশনালঅ্যাট্রিবিউট শ্রেণি - https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.optionalattribute ? দৃশ্য = netframework-4.8

কোডের উদাহরণ নীচে রয়েছে:

namespace OptionalParameterWithOptionalAttribute
{
    class Program
    {
        static void Main(string[] args)
        {
            //Calling the helper method Hello only with required parameters
            Hello("Vardenis", "Pavardenis");
            //Calling the helper method Hello with required and optional parameters
            Hello("Vardenis", "Pavardenis", "Palanga");
        }
        public static void Hello(string firstName, string secondName, 
            [System.Runtime.InteropServices.OptionalAttribute] string  fromCity)
        {
            string result = firstName + " " + secondName;
            if (fromCity != null)
            {
                result += " from " + fromCity;
            }
            Console.WriteLine("Hello " + result);
        }

    }
}

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