代码之家  ›  专栏  ›  技术社区  ›  qdot

亚音速SimpleRepository存储成员类

  •  0
  • qdot  · 技术社区  · 16 年前

    我是C和亚音速的新手。我正在努力解决以下问题:

    public class UnknownInt { 
      public int val;
      public bool known;
    }
    
    public class Record {
      public int ID;
      public UnknownInt data;
    }
    

    我正在尝试构建一个问卷系统,在这个系统中,用户可以提供一个“整数”答案、“未知”答案,以及一个空答案(问题尚未回答)

    换句话说-我的未知类需要实现哪些接口才能符合条件并转换为亚音速3.0简单存储库?

    干杯!

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jürgen Steinblock    15 年前

    我会这样做:

    public class Record
    {
        public int ID {get;set;}
    
        [EditorBrowsable(EditorBrowsableState.Never)]
        public int UnknownIntValue {get;set;}
    
        [EditorBrowsable(EditorBrowsableState.Never)]
        public bool UnknownIntKnown {get;set;}
    
        [SubSonicIgnore]
        public UnknownInt UnknownInt
        {
            get
            {
                return new UnknownInt()
                {
                    val = UnknownIntValue,
                    known = this.UnknownIntKnown
                };
            }
            set
            {
                 this.UnknownIntValue = value.val;
                 this.UnknownIntKnown = value.known;
            }
        }
    
    }
    
    public struct UnknownInt
    { 
        public readonly int Val;
        public readonly bool Known;
    
        public UnknownInt(int val, bool known) 
        {
            this.Val = val;
            this.Known = known;
        }
    
        public override string ToString()
        {
            return String.Format("{0} ({1})",
               Val, Known == true ? "known" : "unknown");
        }
        public override bool Equals(Object obj) 
        {
           return obj is UnknownInt && this == (UnknownInt)obj;
        }
        public static bool operator ==(UnknownInt x, UnknownInt y) 
        {
           return x.Val == y.Val && x.Known == y.Known;
        }
        public static bool operator !=(UnknownInt x, UnknownInt y) 
        {
           return !(x == y);
        }
    
    }
    

    其基本思想是必须创建存储用户定义类型但对intellisense隐藏的列(System.ComponentModel.EditorBrowsable属性)。

    用法示例:

    // 1. Step Create item1
    var item1 = new Record();
    item1.ID = 1;
    item1.UnknownInt = new UnknownInt(1, true);
    
    // 2. Setp Create item2
    var item2 = new Record();
    item2.ID = 2;
    item2.UnknownImt = new UnknownInt(1, false);
    
    if (item1.UnknownInt == item2.UnknownInt)
        Console.WriteLine("???");
    else
        Console.WriteLine("Profit!!!");
    
        2
  •  0
  •   saintedlama    16 年前

    尝试使用一个可为空的int(int?)而不是未知的类-你可以通过亚音速存储它。不需要XML转换!