2011-11-05 12 views
9

¿Qué pasa con el siguiente código? No puedo ver el motivo del error mencionado a continuación. Estoy usando Mono, ¿podría ser un error en Mono y se compilará sin errores en VStudio?Sin conversión de parámetros de tipo de cuadro o tipo para el parámetro Tipo genérico con Mono

public static class ClientFactory { 
    public static T CreateClient<T, I>() 
    /* error here */ 
    where T : ClientBase<I>, I 
    where I : class { 
    return CreateClient<T, I>(null, null); 
    } 

    public static T CreateClient<T, I>(string endpointConfigurationName) 
    /* error here */ 
    where T : ClientBase<I>, I 
    where I : class { 
    return CreateClient<T, I>(endpointConfigurationName, null); 
    } 

    public static T CreateClient<T, I>(string endpointConfigurationName, string remoteAddress) 
    /* error here */ 
    where T : ClientBase<I>, I 
    where I : class { 
    return CreateClient<T, I>(endpointConfigurationName, remoteAddress, Settings.Default.UserName, Settings.Default.Password); 
    } 

    public static T CreateClient<T, I>(string endpointConfigurationName, string remoteAddress, string userName, string password) 
    /* NO error here, this method compiles fine */ 
    where T : ClientBase<I>, I 
    where I : class { 

    T client; 

    /* get client instance */ 
    /* do stuff with it */ 

    return client; 
    } 
} 

estoy recibiendo el error de compilación:

…/ClientFactory.cs(14,14): Error CS0314: The type `T' cannot be used as type parameter `T' in the generic type or method `….ClientFactory.CreateClient(string, string)'. There is no boxing or type parameter conversion from `T' to `System.ServiceModel.ClientBase' (CS0314)

+1

He copiado el código para un nuevo proyecto VC# 2010, cambió '/ * hacer cosas * /' a 'cliente = predeterminado (T); 'y reemplazado las dos configuraciones con' "" '. Compila bien, sin error del compilador. – dtb

+0

¿Podría ser esto un error en Mono? – knittl

+0

¿Qué versión de 'dmcs' estás usando? – dtb

Respuesta

2

TL; DR que es probable que sea un error en la versión: se compila perfectamente en mi versión de Mono.


El siguiente código compila perfectamente:

using System; 

namespace so_test 
{ 

    public class ClientBase<T> { 
     // whatever 
    } 

    public static class Settings { 
     public static SettingValues Default; 
    } 

    public class SettingValues { 
     public string UserName; 
     public string Password; 
    } 

    public static class ClientFactory { 
     public static T CreateClient<T, I>() 
     /* error here */ 
     where T : ClientBase<I>, I 
     where I : class { 
      return CreateClient<T, I>(null, null); 
     } 

     public static T CreateClient<T, I>(string endpointConfigurationName) 
     /* error here */ 
     where T : ClientBase<I>, I 
     where I : class { 
      return CreateClient<T, I>(endpointConfigurationName, null); 
     } 

     public static T CreateClient<T, I>(string endpointConfigurationName, string remoteAddress) 
     /* error here */ 
     where T : ClientBase<I>, I 
     where I : class { 
      return CreateClient<T, I>(endpointConfigurationName, remoteAddress, Settings.Default.UserName, Settings.Default.Password); 
     } 

     public static T CreateClient<T, I>(string endpointConfigurationName, string remoteAddress, string userName, string password) 
     /* NO error here, this method compiles fine */ 
     where T : ClientBase<I>, I 
     where I : class { 

      T client = default(T); 

      /* get client instance */ 
      /* do stuff with it */ 

      return client; 
     } 
    } 
} 

imac:~ sklivvz$ mono -V 
Mono JIT compiler version 2.10.6 (tarball Fri Sep 16 00:13:06 EDT 2011) 
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com 
    TLS:   normal 
    SIGSEGV:  normal 
    Notification: kqueue 
    Architecture: x86 
    Disabled:  none 
    Misc:   debugger softdebug 
    LLVM:   yes(2.9svn-mono) 
    GC:   Included Boehm (with typed GC) 
+1

Esto fue de hecho un error en mono. Se introdujo en [commit 'bf9a580867'] (https://github.com/mono/mono/commit/bf9a580867cd573a398ed5c3ea5668c57e5b9b9b) y se corrigió en [commit' 8f96710cc'] (https://github.com/mono/mono/commit/8f96710cca52860c47144592b9c82ea2fc4198b7) – knittl

Cuestiones relacionadas