C #: Tetapkan nilai yang sama ke banyak variabel dalam satu pernyataan


161

Apakah ada cara (hanya ingin tahu karena saya menemukan beberapa penugasan dengan nilai yang sama untuk beberapa variabel hari ini) di C # untuk menetapkan satu nilai ke beberapa variabel sekaligus dalam satu pernyataan?

Sesuatu di sepanjang baris ini (kodesemu):

int num1 = 1;
int num2 = 1;

num1 & num2 = 5;

Mungkin tidak, tetapi saya pikir itu layak untuk ditanyakan seandainya sesuatu yang serupa sebenarnya mungkin terjadi!

Jawaban:


258

Sesederhana:

num1 = num2 = 5;

Saat menggunakan properti objek alih-alih variabel, menarik untuk mengetahui bahwa getaccessor dari nilai antara tidak dipanggil. Hanya setaccessor yang dipanggil untuk semua properti yang diakses dalam urutan penetapan.

Ambil contoh kelas yang menulis ke konsol setiap kali getdan setaccessor dipanggil.

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;
        }
    }
}

Ini akan menampilkan

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

Berarti kompiler akan menetapkan nilai untuk semua properti dan itu tidak akan membaca kembali nilai setiap kali ditugaskan.


36
Sebenarnya tidak aneh. Logikanya adalah sebagai berikut: Operasi penugasan itu sendiri mengembalikan nilai, yang merupakan nilai yang telah ditetapkan. Urutan eksekusi adalah: num1 = (num2 = 5)dan tugas pertama yang dieksekusi ( num2 = 5) mengembalikan nilai 5 ke dunia luar - yang pada gilirannya ditugaskan ke num1. Ini berfungsi ad infinitum ( num0 = num1 = num2 = 5).
Jpsy

Jika Anda ingin mengujinya, coba Console.WriteLine(num = 5);. (Penafian: Saya belum)
Arlen Beiler

3
Pertanyaan: Apakah ini dianggap praktik buruk num1 = num2 = 5? Apakah ini mengubah kode yang tidak dapat dibaca jika ada lebih banyak variabel yang terlibat? Maaf untuk membajak, saya tidak ingin membuat posting baru hanya untuk itu.
johnildergleidisson

Tidak ada jawaban yang benar. Saya jarang menggunakannya di program saya dan saya bisa menghindarinya.
Pierre-Alain Vigeant

Turun ke gaya pengkodean saya menganggap itu. Terima kasih balasannya.
johnildergleidisson

54

Ini akan ingin Anda inginkan:

int num1, num2;
num1 = num2 = 5;

tugas 'num2 = 5' akan mengembalikan nilai yang ditugaskan.

Ini memungkinkan Anda untuk melakukan hal-hal gila seperti num1 = (num2 = 5) +3;yang akan menetapkan 8 untuk num1, meskipun saya tidak akan merekomendasikan melakukannya karena tidak terlalu mudah dibaca.


Itu tidak berfungsi lagi.
Aurelien B

33
int num1=5,num2=5

Mendeklarasikan dan menetapkan variabel dalam pernyataan yang sama.


Apakah ini satu atau dua pernyataan?
Merin Nakarmi

jawaban yang bagus, tetapi terlihat aneh ketika "5" adalah konstanta string yang panjang. string a = "really long string", b = "really long string";
Alex

13

Sesuatu yang sedikit lebih pendek dalam sintaksis tetapi mengambil apa yang telah dinyatakan orang lain.

int num1, num2 = num1 = 1;

Saya pikir ini adalah jawaban terbaik karena inisialisasi dan penugasan dapat dilakukan dalam satu pernyataan.
Sachin Parashar

11

Coba ini:

num1 = num2 = 5;

Perhatikan bahwa ini tidak akan berfungsi di VB.


1
Apakah Anda tahu jika ada beberapa sintaks alternatif untuk pengembang VB, atau apakah banyak tugas tidak tersedia di VB?
ckittel

3
@ cki: AFAIK, tidak didukung.
SLaks

@ckittel Dalam VB =digunakan baik untuk penugasan dan kesetaraan, jadi num1 = num2 = 5akan berarti "menetapkan hasil boolean dari apakah lima sama dengan num2variabel num1". Karena =operator memiliki dua arti ini, tidak ada cara untuk mewakili sintaks ini. Yang terbaik yang bisa Anda lakukan adalah membuat fungsi yang mengambil sejumlah parameter byrefserta nilai dan menetapkan semua parameter ke nilai itu.
Servy


5
int num1, num2, num3;

num1 = num2 = num3 = 5;

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


5

Contoh Anda adalah:

int num1 = 1;
int num2 = 1;

num1 = num2 = 5;


0

Sekarang ini adalah hal dalam C #:

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

Dengan melakukan hal di atas, Anda pada dasarnya mendeklarasikan tiga variabel. a = 1, b = 2dan c = 3. Semua dalam satu baris.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.