Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: làm thế nào để tạo được enum có thể nhận giá trị Color.Red | Color.Blue với nhiều enum trong danh sách

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Mặc định làm thế nào để tạo được enum có thể nhận giá trị Color.Red | Color.Blue với nhiều enum trong danh sách

    Ví dụ mình có
    [Flags]
    enum test{
    t1=1,
    t2=2,
    t3=4
    }
    Viết như vậy thì có thể dùng test t=test.t1 | test.t2. Tuy nhiên là giá trị của enum sau luôn phải gấp đôi enum trước nó.
    Nhưng như vậy thì nếu ta có quá nhiều enum cần định nghĩa, ví dụ có t99 chẳng hạn thì t99 này sẽ có giá trị vượt ra khỏi các kiểu số của c#. Ai có giải pháp nào cho trường hợp này không.

  2. #2
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Mặc định Câu hỏi hơi khó hiểu

    Bạn miêu tả rõ hơn xí (tốt nhất nên minh họa code chi tiết)
    Mình cảm giác đây là câu hỏi hay

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Đơn giản là ntn thế này bác ah. Mình cần 1 tùy chọn viết dưới dạng enum, ví dụ
    enum options{
    op1,
    op2
    }
    H mình muốn chọn các enum & viết dạng ntn: options opt=options.op1 | options.op2;
    H làm sao để biết opt có chứa những enum nào.
    Google thì ra là dùng attribute Flags, và đặt giá trị cho enum đứng sau có giá trị = 2 lần enum đứng trước, tuy nhiên là nếu cứ gấp đôi thế thì nó vượt ra khỏi phạm vi của int, ulong, long=>khắc phục ntn?

  4. #4
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Hiểu rồi, đây đúng là một tình huống hay.
    Trong trường hợp này thì không thể sử dụng kiểu enum được, vì:
    - giá trị số nguyên yêu cầu của option thứ n (khoảng 100 đi)= 2^n=1267650600228229401496703205376 >> kiểu số nguyên lớn nhất của C# là ulong=18446744073709551615.
    - quản lý thế này khá tốn bộ nhớ, vì mỗi số nguyên kiểu ulong chiếm tới 8 bytes = 64 bits
    - không thể extend enum vì expert chỉ là kiểu nguyên.

    Vì thế mình chuyển sang xử lý bit, cách này đơn giản, xử lý nhanh mà ít tốn kém bộ nhớ.
    Hơn hết là có thể extend bao nhiêu phần tử tùy ý mà ko sợ over scope.
    Sample mình dùng class BitArrary, bạn tham khảo nhé

    Code:
    class ColorMix
            {            
                BitArray _colorRange = new BitArray(byte.MaxValue);
                public void SetColor(Color color, bool isHasThisColor)
                {
                    //_colorRange[(byte)color] = isHasThisColor;
                    _colorRange.Set((byte)color, isHasThisColor);
                }
                ulong
                public bool GetColor(Color color)
                {
                    return _colorRange[(byte)color];
                }
    
                public void Clear()
                {
                    _colorRange.SetAll(false);
                }            
            }
            enum Color : byte
            {
                White = byte.MinValue,
                Blue,
                Red,
    ....(Y:DY)
                Black = byte.MaxValue
            }

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Nếu tạo thêm 1 lớp mới để lưu thì đơn giản tuy nhiên nghe có vẻ k dc tiện cho lắm. KHông biết có cách chính thống nào mà c# hỗ trợ k?

  6. #6
    Ngày gia nhập
    10 2010
    Nơi ở
    Đà Nẵng
    Bài viết
    10

    Mặc định làm thế nào để tạo được enum có thể nhận giá trị Color.Red | Color.Blue với nhiều enum trong danh sách

    Theo hiểu biết của mình thì là không. Bất cứ điều gì cũng có giới hạn của nó cả mà

Các đề tài tương tự

  1. Áo len nữ đẹp 2012 hàng mới về [b][color=#3397CD][url=http://quanaodep.info/ao-len-nu] Áo len nữ[/url][/color] ALN 0
    Gửi bởi hpc4th1 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 20-09-2012, 03:15 PM
  2. Lập trình C Cho em hỏi về enum trong C
    Gửi bởi anhut trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 07-03-2012, 08:02 PM
  3. lỗi với từ khóa enum trong C
    Gửi bởi huuduytk7 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 10:47 AM
  4. Ép 1 kiểu Color sang kiểu String như thế nào?
    Gửi bởi baotran trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 24-08-2010, 03:09 PM
  5. Enum trong VS C++ sử dụng như thế nào?
    Gửi bởi nguyendima trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 24-02-2010, 09:16 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn