2011-03-06 62 views
0

我可以创建自动通用帮助程序方法吗?让我解释。通用帮助程序方法c#

这是我现在该怎么办:

item.slp_spot_lang_prop.GetAvailable<slp_spot_lang_prop>(Model.LanguageAlternatives).slp_title 

然后,我有这样的helper方法

public static T GetAvailable<T>(this IEnumerable<ILanguageEntity> helper, IQueryable<langa_language_alternative> languageAlt) 
{  
    return (T) helper.SingleOrDefault(d => d.LanguageId == languageAlt.Single(e => e.langa_sitent_id == (int)d.SiteEntityId && e.langa_entid == d.EntityId && e.langa_wantedlangid == Global.SiteInfo.LanguageID).langa_availablelangid); 
} 

我希望能够做的仅仅是

item.slp_spot_lang_prop.GetAvailable(Model.LanguageAlternatives).slp_title 

而且例如:

public static GetAvailable(this IEnumerable<ILanguageEntity> helper, IQueryable<langa_language_alternative> languageAlt) 
{  
    var type = helper.GetEnumerator().Current.GetType().BaseType; 
    return (type) helper.SingleOrDefault(d => d.LanguageId == languageAlt.Single(e => e.langa_sitent_id == (int)d.SiteEntityId && e.langa_entid == d.EntityId && e.langa_wantedlangid == Global.SiteInfo.LanguageID).langa_availablelangid); 
} 

我希望你明白我的意思。返回类型应该是IEnumerable<IlanguageEntity>的基本类型,在示例中应该是slp_spot_lang_prop。

整个目的是摆脱GetAvailable<type>(),只是有GetAvailable(),因为它是我知道已经是返回类型的帮助器方法。

+1

'slp_spot_lang_prop','slp_title'&'langa_sitent_id'吸如命名。整个会议很糟糕。 – 2011-03-06 13:16:07

回答

2

您是否尝试过在泛型上使用约束来指定帮助器类型(它不是帮助器,但您知道这一点)?使用约束力T可以从,派生或实现约束类型,但允许T的实际值从参数中被诱导而不是被指定。在您之前的声明中,无法确定T是什么,因为它与任何参数无关。

public static T GetAvailable<T>(this IEnumerable<T> helper, 
           IQueryable<langa_language_alternative> languageAlt) 
    where T : ILanguageEntity 
{  
    return (T) helper.SingleOrDefault(d => d.LanguageId == languageAlt.Single(e => e.langa_sitent_id == (int)d.SiteEntityId 
             && e.langa_entid == d.EntityId 
             && e.langa_wantedlangid == Global.SiteInfo.LanguageID).langa_availablelangid); 
}