通用助手方法c#

时间:2011-03-06 13:00:40

标签: c# asp.net

我可以创建自动通用辅助方法吗?让我解释一下。

这就是我现在的做法:

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(),因为它是一个帮助方法我已经知道返回类型。

1 个答案:

答案 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);
}