2017-08-11 85 views
-1

Java代碼差異在Java中對C#

public abstract class A<T extends AA> extends B 
{ 
    public A() 
    { 
     Type type = this.getClass().getGenericSuperclass(); 

     ParameterizedType parametrizedType = (ParameterizedType) type; 
     Type[] fieldArgTypes = parametrizedType.getActualTypeArguments(); 
     parameterType = (Class<T>) fieldArgTypes[0]; 
    } 
} 

在C#.NET CORE我寫了這個:

public abstract class A<T> : B where T: class 
{   
    public A() 
    { 
     Type type = GetType().GetGenericTypeDefinition(); 
     parameterType = type.GenericTypeArguments[0]; 
    } 
} 

但是當我運行程序我有錯誤:This operation is only valid on generic types.我有不知道如何解決這個問題。我想要實現Java代碼中的一樣。

+0

應該在類型實例上調用'GetType()'。該行是否編譯'GetType()。GetGenericTypeDefinition();'? – Rahul

+0

@Rahul和Java代碼你看到類型?我需要在C#中編寫相同的代碼。是的 – Bubuu

+0

不清楚你想在這裏做什麼,但你在尋找'this.GetType()。GetGenericArguments()'? – DavidG

回答

0

最後我寫了關於this.getClass().getGenericSuperclass();的紅色Java文檔,它與泛型沒有任何關係,C#代碼可能是GetType().GetTypeInfo().BaseType。現在的作品非常出色。