示例#1
0
 public void AddFragmentMask(params object[] masks)
 {
     try
     {
         Targets.AddFragmentMask(masks);
     }
     catch (Error e)
     {
         throw new Error("Error adding mask to class {0}: {1}", Util.ToNiceTypeName(GetType()), e.Message);
     }
 }
示例#2
0
        public void AddFragmentMask(params object[] masks)
        {
            var fragmentTypes = TargetType.GetFields();

            foreach (var mask in masks)
            {
                Type maskType = mask.GetType();
                ITarget.ValidFragmentType(maskType);
                if (!fragmentTypes.Any(fragmentType => fragmentType.FieldType == maskType))
                {
                    throw new Error(
                              "Fragment mask type '{0}' is not present in this target, here is the list of valid types:\n- {1}",
                              maskType,
                              string.Join(
                                  "\n- ",
                                  fragmentTypes
                                  .Select(fragmentType => Util.ToNiceTypeName(fragmentType.FieldType))
                                  .OrderBy(type => type, StringComparer.InvariantCultureIgnoreCase)
                                  )
                              );
                }

                List <int> maskValues;
                if (_fragmentMasks == null || !_fragmentMasks.TryGetValue(maskType, out maskValues))
                {
                    if (_fragmentMasks == null)
                    {
                        _fragmentMasks = new Dictionary <Type, List <int> >();
                    }

                    maskValues = new List <int>();
                    _fragmentMasks.Add(maskType, maskValues);
                }

                maskValues.Add((int)mask);
            }
        }