2011-11-05 8 views
9

Co jest nie tak z następującym kodem? Nie widzę przyczyny błędu wymienionego poniżej. Używam Mono, czy może to być błąd w Mono i czy będzie on kompilowany bez błędów w VStudio?Brak konwertowania parametrów boksu lub typu dla parametru ogólnego Typ z 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; 
    } 
} 

Otrzymuję błąd kompilacji:

…/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

skopiowane kod do nowego VC# 2010 projektu, zmienił '/ * do rzeczy * /' na 'klienta = default (T); 'i zastąpił dwa ustawienia' '". Kompiluje dobrze, bez błędu kompilatora. – dtb

+0

Czy to może być błąd w Mono? – knittl

+0

Którą wersję 'dmcs' używasz? – dtb

Odpowiedz

2

TL; DR to może być błąd w swojej wersji: kompiluje doskonale na mojej wersji mono.


Poniższy kod kompiluje się doskonale:

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

To był rzeczywiście błąd w mono. Został on wprowadzony w [commit 'bf9a580867'] (https://github.com/mono/mono/commit/bf9a580867cd573a398ed5c3ea5668c57e5b9b9b) i naprawiony w [commit' 8f96710cc'] (https://github.com/mono/mono/commit/8f96710cca52860c47144592b9c82ea2fc4198b7) – knittl

Powiązane problemy