簡體   English   中英

創建泛型方法並使用類型參數

[英]Creating generic method and using type parameter

我創建了這個方法,它是一個對象工廠:

public static T GetService<T>(T serviceInterface)
{
    if (serviceInterface.Equals(typeof(IMemberService)))
    {
        return (T)(object)new MemberService();
    }
    else if (serviceInterface.Equals(typeof(ILookupService)))
    {
        return (T)(object)new LookupService();
    }
    throw new ArgumentOutOfRangeException("No action is defined for service interface " + serviceInterface.Name);
}

現在,我想進一步消除對“serviceInterface”參數的需求,但我的問題是 - 我不知道如何將類型參數T與接口進行比較:

T.Equals(typeof(ILookupService)) 

給出編譯器錯誤:'T'是'type parameter',在給定的上下文中無效。

任何想法如何將類型參數與接口進行比較?

謝謝,安德烈

您可以使用typeof(T)來獲取Type對象,這可以替換serviceInterface的使用

例如

public static T GetService<T>()
{
    Type serviceInterface = typeof(T);
    if (serviceInterface.Equals(typeof(IMemberService)))
    {
        return (T)(object)new MemberService();
    }
    else if (serviceInterface.Equals(typeof(ILookupService)))
    {
        return (T)(object)new LookupService();
    }
    throw new ArgumentOutOfRangeException("No action is defined for service interface " + serviceInterface.Name);
}

使用typeof(T)

所以,

typeof(T).Equals(typeof(ILookupService))
if (typeof(IMemberService).IsAssignableFrom(typeof(T)))
{}
else if (typeof(ILookupService).IsAssignableFrom(typeof(T)))
{}

請問就是運營商適用嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM