public ProtocolInfo(ProtocolType protocolType, OperationTypeInfo operationTypeInfo, VarAddress varAddress, string typeFullName, string operation, object[] arguments)
 {
     ProtocolType      = protocolType;
     OperationTypeInfo = operationTypeInfo;
     VarAddress        = varAddress;
     TypeFullName      = typeFullName;
     Operation         = operation;
     Arguments         = arguments;
 }
        static Type[] GetArgTypes(TypeFinder typeFinder, OperationTypeInfo operationTypeInfo, Type[] argTypesOri)
        {
            List <Type> argTypes = new List <Type>();

            if (operationTypeInfo == null)
            {
                argTypes.AddRange(argTypesOri);
            }
            else
            {
                for (int i = 0; i < operationTypeInfo.Arguments.Length; i++)
                {
                    Type type = typeFinder.GetType(operationTypeInfo.Arguments[i]);
                    if (type == null)
                    {
                        throw new InformationException(string.Format(CultureInfo.CurrentCulture, ResourcesLocal.Instance.UnknownTypeInfoFormat, operationTypeInfo.Arguments[i]));
                    }
                    argTypes.Add(type);
                }

                if (operationTypeInfo.Arguments.Length == 1 &&
                    operationTypeInfo.Arguments[0] == typeof(object[]).ToString() &&
                    argTypesOri.Length != 1)
                {
                    throw new InformationException(string.Format(CultureInfo.CurrentCulture, ResourcesLocal.Instance.ErrorOperationTypeArgInfoForObjectArrayFormat,
                                                                 MakeErrorInvokeArgInfo(argTypes.ToArray()), MakeErrorInvokeArgInfo(argTypesOri)));
                }

                if (argTypesOri.Length != operationTypeInfo.Arguments.Length)
                {
                    throw new InformationException(string.Format(CultureInfo.CurrentCulture, ResourcesLocal.Instance.ErrorOperationTypeArgInfoFormat,
                                                                 MakeErrorInvokeArgInfo(argTypes.ToArray()), MakeErrorInvokeArgInfo(argTypesOri)));
                }
            }
            return(argTypes.ToArray());
        }