簡體   English   中英

從子類實例調用泛型參數的擴展方法

[英]Extension method with generic parameter called from subclass instance

這是我的問題:

public class User
{
    public virtual void Save()
    {
        Connection.Save(this);
    }
}

public class Administrator : User
{
}

public static class Queries
{
    public static void Save<T>(this IDbConnection cn, T entity)
    {
        var properties = Mapper<T>.GetProperties();
        // other code
    }
}

public static class Mapper<T>
{
    public static IList<Property> GetProperties()
    {
        var type = typeof(T);
        // other code
    }

    // other T-dependent methods
}

user.Save() ,它工作正常,但是對於admin.Save() ,通用參數TUser ,而不是Administrator ,因此GetProperties()內部的反射返回用戶屬性。

我可以通過重載Mapper<T>.GetProperties(instance.GetType())使其工作,但這似乎在語義上不正確,因為有兩種類型會導致歧義。

有沒有更好的方法來解決這個問題? 謝謝。

通用類型參數在編譯時解析,而不是在運行時解決,沒有什么可以做的。
您需要通過在對象的實例上使用GetType()來確定類型以獲取運行時類型,因此您可能需要重新考慮您的設計,並記住這一點。 在這種情況下,使用泛型可能不是最好的事情。

暫無
暫無

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

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