CoerceArg() static private method

static private CoerceArg ( Object value, Type pt ) : Object
value Object
pt System.Type
return Object
Ejemplo n.º 1
0
 internal static object[] CoerceArgs(MethodBase mb, object[] args, ParameterInfo[] pi)
 {
     if (pi == null)
     {
         throw new ArgumentNullException("pi");
     }
     if (pi.Length != args.Length)
     {
         throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_ArgMismatch"), new object[]
         {
             mb.DeclaringType.FullName,
             mb.Name,
             args.Length,
             pi.Length
         }));
     }
     for (int i = 0; i < pi.Length; i++)
     {
         ParameterInfo parameterInfo = pi[i];
         Type          parameterType = parameterInfo.ParameterType;
         object        obj           = args[i];
         if (obj != null)
         {
             args[i] = Message.CoerceArg(obj, parameterType);
         }
         else if (parameterType.IsByRef)
         {
             Type elementType = parameterType.GetElementType();
             if (elementType.IsValueType)
             {
                 if (parameterInfo.IsOut)
                 {
                     args[i] = Activator.CreateInstance(elementType, true);
                 }
                 else if (!elementType.IsGenericType || !(elementType.GetGenericTypeDefinition() == typeof(Nullable <>)))
                 {
                     throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_MissingArgValue"), elementType.FullName, i));
                 }
             }
         }
         else if (parameterType.IsValueType && (!parameterType.IsGenericType || !(parameterType.GetGenericTypeDefinition() == typeof(Nullable <>))))
         {
             throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_MissingArgValue"), parameterType.FullName, i));
         }
     }
     return(args);
 }