সি #: একক বিবৃতিতে একাধিক ভেরিয়েবলের জন্য একই মান নির্ধারণ করুন


161

সি # তে কোনও একক বিবৃতিতে একবারে একাধিক ভেরিয়েবলের জন্য একটি মান নির্ধারণের জন্য কি কোনও উপায় আছে (কৌতূহলের বাইরে নয়)?

এই লাইন বরাবর কিছু (সিউডোকোড):

int num1 = 1;
int num2 = 1;

num1 & num2 = 5;

সম্ভবত না তবে আমি ভেবেছিলাম যে অনুরূপ কিছু আসলে সম্ভব হলে এটি জিজ্ঞাসা করা উপযুক্ত!

উত্তর:


258

এটি এতটা সহজ:

num1 = num2 = 5;

ভেরিয়েবলের পরিবর্তে কোনও অবজেক্টের সম্পত্তি ব্যবহার করার getসময়, মধ্যবর্তী মানের অ্যাক্সেসর বলা হয় না তা জেনে রাখা আকর্ষণীয় । setঅ্যাসাইনমেন্ট ক্রমটিতে অ্যাক্সেস করা সমস্ত সম্পত্তি জন্য কেবল অ্যাকসেসরকেই অনুরোধ করা হয়।

উদাহরণস্বরূপ একটি বর্গ যে কনসোল সব থেকে লেখার নিন getএবং setঅ্যাকসেসর প্রার্থনা করছে।

static void Main(string[] args)
{
    var accessorSource = new AccessorTest(5);
    var accessor1 = new AccessorTest();
    var accessor2 = new AccessorTest();

    accessor1.Value = accessor2.Value = accessorSource.Value;

    Console.ReadLine();
}

public class AccessorTest
{
    public AccessorTest(int value = default(int))
    {
        _Value = value;
    }

    private int _Value;

    public int Value
    {
        get
        {
            Console.WriteLine("AccessorTest.Value.get {0}", _Value);
            return _Value;
        }
        set
        {
            Console.WriteLine("AccessorTest.Value.set {0}", value);
            _Value = value;
        }
    }
}

এই আউটপুট হবে

AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5

অর্থ যে সংকলকটি সমস্ত বৈশিষ্ট্যের জন্য মান নির্ধারণ করবে এবং যতবার নির্ধারিত হবে ততবার এটি পুনরায় পাঠ করবে না।


36
এটি আসলে অদ্ভুত নয়। যুক্তিটি নিম্নরূপ: অ্যাসাইনমেন্ট অপারেশন নিজেই একটি মান প্রদান করে, যা নির্ধারিত মান। মৃত্যুদন্ডের ক্রম হ'ল: num1 = (num2 = 5)এবং প্রথম নির্বাহ করা হয় যা নির্বাহ করা হয় ( num2 = 5) বহিরাগত বিশ্বে 5 মান প্রদান করে - যা পরিবর্তে num1 এ নির্ধারিত হয়। এটি বিজ্ঞাপন ইনফিনিটাম ( num0 = num1 = num2 = 5) ব্যবহার করে।
জেপসি

আপনি যদি এটি পরীক্ষা করতে চান তবে চেষ্টা করুন Console.WriteLine(num = 5);। (অস্বীকৃতি: আমি এখনও করি নি)
অ্যারলেন বেলার

3
প্রশ্ন: এটাকে কি খারাপ অভ্যাস বলে বিবেচনা করা হয় num1 = num2 = 5? আরও ভেরিয়েবল জড়িত থাকলে কি কোডটি অপঠনযোগ্য পরিণত হয়? হাইজ্যাক করার জন্য দুঃখিত, আমি কেবল এটির জন্য একটি নতুন পোস্ট তৈরি করতে চাইনি।
johnildergleidisson

সঠিক উত্তর নেই। আমি আমার প্রোগ্রামে এটি খুব কমই ব্যবহার করি এবং আমি এড়াতে পারতাম।
পিয়েরে-আলাইন ভিজিয়েন্ট

ডাউন টু কোডিং স্টাইল আমি তখন ধরে নিই। উত্তরের জন্য ধন্যবাদ.
জনহোল্ডারগ্লিডিসন

54

এটি আপনাকে চাইবে তা চাইবে:

int num1, num2;
num1 = num2 = 5;

'num2 = 5' অ্যাসাইনমেন্ট নির্ধারিত মান প্রদান করবে।

এটি আপনাকে পাগলের মতো কাজ করতে দেয় num1 = (num2 = 5) +3;যা 8 থেকে num1 নির্ধারিত করবে, যদিও আমি এটি খুব পাঠযোগ্য না হিসাবে এটি করার পরামর্শ দিই না।


এটি আর কাজ করে না।
অরেলিন বি

33
int num1=5,num2=5

একই বিবৃতিতে ভেরিয়েবল ঘোষণা এবং নির্ধারণ করা।


এটি কি একক বিবৃতি না দুটি বক্তব্য?
মেরিন নাকারমি

দুর্দান্ত উত্তর, তবে অদ্ভুত দেখাচ্ছে যখন "5" দীর্ঘ স্ট্রিং ধ্রুবক হয়। string a = "really long string", b = "really long string";
অ্যালেক্স

13

বাক্যবিন্যাসে কিছুটা খাটো হলেও অন্যরা ইতিমধ্যে যা বলেছে সেগুলি গ্রহণ করছে।

int num1, num2 = num1 = 1;

আমি মনে করি এটি সেরা উত্তর কারণ একা এক বিবৃতিতে সূচনা এবং অ্যাসাইনমেন্ট উভয়ই করা যেতে পারে।
শচীন পরাশর

11

এটা চেষ্টা কর:

num1 = num2 = 5;

মনে রাখবেন যে এটি ভিবিতে কাজ করবে না।


1
আপনি কি জানেন যে ভিবি বিকাশকারীদের জন্য কোনও বিকল্প বাক্য গঠন আছে বা ভিবিতে একাধিক অ্যাসাইনমেন্ট সহজলভ্য নয়?
ckittel

3
@ কিকি: এএফাইক, এটি সমর্থিত নয়।
স্ল্যাक्स

@ckittel ভিবি সালে =নিয়োগ এবং সমতার জন্য উভয় ব্যবহার করা হয়, তাই num1 = num2 = 5এর অর্থ "থাকুক বা না থাকুক পাঁচটি সমান এর বুলিয়ান ফলাফল নির্ধারণ করবে num2পরিবর্তনশীল num1"। কারণ =অপারেটর এই দুটি অর্থ রয়েছে, সেখানে এই সিনট্যাক্স প্রতিনিধিত্ব করতে কোনও উপায় নেই। আপনি যা করতে পারেন তা হ'ল একটি ফাংশন তৈরি করা যা বেশ কয়েকটি প্যারামিটারের byrefপাশাপাশি একটি মান নিয়েছিল এবং সমস্ত মানটিকে সেই মানটিতে নির্ধারিত করে।
পরিবেশন করুন


5
int num1, num2, num3;

num1 = num2 = num3 = 5;

Console.WriteLine(num1 + "=" + num2 + "=" + num3);    // 5=5=5




0

এটি এখন সি # তে একটি জিনিস:

var (a, b, c) = (1, 2, 3);

উপরের কাজটি করে আপনি মূলত তিনটি ভেরিয়েবল ঘোষণা করেছেন। a = 1, b = 2এবং c = 3। সব একক লাইনে।

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