我可以创建自动通用辅助方法吗?让我解释一下。
这就是我现在的做法:
item.slp_spot_lang_prop.GetAvailable<slp_spot_lang_prop>(Model.LanguageAlternatives).slp_title
然后我有了这个辅助方法
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()
,因为它是一个帮助方法我已经知道返回类型。
答案 0 :(得分: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);
}