private static ArgTypeMeta GetTypeMeta(ArguementSerializeType serializeType)
        {
            ArgTypeMeta result = null;

            _serializeTypeToMeta.TryGetValue(serializeType, out result);
            return(result);
        }
 public SerializableArguement(System.Type type)
 {
     if (type.IsSubclassOf(typeof(UnityEngine.Object)))
     {
         _serializeType = ArguementSerializeType.Object;
         _string        = type.AssemblyQualifiedName;
     }
     else if (type.IsEnum)
     {
         _serializeType = ArguementSerializeType.Enum;
         _string        = type.AssemblyQualifiedName;
     }
     else
     {
         if (_typeToSerializeType.ContainsKey(type))
         {
             _serializeType = _typeToSerializeType[type];
             ArgTypeMeta argTypeMeta  = GetTypeMeta(_serializeType);
             object      defaultValue = null;
             if (type.IsValueType)
             {
                 defaultValue = System.Activator.CreateInstance(type);
             }
             argTypeMeta.onAssignValue(this, defaultValue);
         }
         else
         {
             throw new System.NotImplementedException("unsupport type:" + type);
         }
     }
 }
 private void AssertSerializeType(ArguementSerializeType type)
 {
     if (_serializeType != type)
     {
         throw new System.InvalidOperationException($"This operation is only valid when ArguementSerializeType is {type}, current is {_serializeType}");
     }
 }
 public SerializableArguement(bool value)
 {
     _serializeType = ArguementSerializeType.Bool;
     this.boolValue = value;
 }
 public SerializableArguement(float value)
 {
     _serializeType  = ArguementSerializeType.Float;
     this.floatValue = value;
 }
 public SerializableArguement(int value)
 {
     _serializeType = ArguementSerializeType.Int;
     this.intValue  = value;
 }
 public SerializableArguement(string str)
 {
     _serializeType = ArguementSerializeType.String;
     _string        = str;
 }