首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绕过指定泛型参数类型的需要?

如何绕过指定泛型参数类型的需要?
EN

Stack Overflow用户
提问于 2011-08-18 02:02:24
回答 2查看 243关注 0票数 2

我有一个像这样的扩展方法:

代码语言:javascript
复制
      public static void ImplementsAttribute<TX, TY>(this Expression<Func<TY>> expression) 
     where TX : Coupling.PropertiesMergerAttribute
  {
     var memberExpression = expression.Body as MemberExpression;
     var name = MetaHelper.GetPropertyName(expression);
     var property = memberExpression.Expression.Type.GetProperty(name);
     var attributes = property.GetCustomAttributes(true);
     Assert.IsTrue(attributes.Any(a => a is TX));
  }

我可以像这样使用我的代码:

代码语言:javascript
复制
     Expression<Func<String>> nameProperty = () => new ImprovisedExplosiveXML().Name;
     nameProperty.ImplementsAttribute<Coupling.UnresolvablePropertiesMergerAttribute, String>();

但我不需要指定第二个泛型参数类型:

代码语言:javascript
复制
     Expression<Func<String>> nameProperty = () => new ImprovisedExplosiveXML().Name;
     nameProperty.ImplementsAttribute<Coupling.UnresolvablePropertiesMergerAttribute>();

在C# 3.5中有办法做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-18 02:19:52

C#不支持部分泛型推理。如果编译器无法确定所有类型,则必须自己提供所有类型。

票数 2
EN

Stack Overflow用户

发布于 2011-08-18 02:30:20

你可以这样做:

代码语言:javascript
复制
public class AttributeTester
{
    public Attribute[] Attributes { get; set; }

    public void ImplementsAttribute<TAttType>()
    {
         Assert.IsTrue(Attributes.Any(x => x is TAttType));
    }
}

public static void ForProperty<TType, TProperty>(this TType obj, Expression<Func<TType, TProperty>> expression)
{
     var memberExpression = expression.Body as MemberExpression;
     var name = MetaHelper.GetPropertyName(expression);
     var property = memberExpression.Expression.Type.GetProperty(name);
     return new AttributeTester { Attributes = property.GetCustomAttributes(true) };
}

然后,您应该能够像这样编写它:

代码语言:javascript
复制
new ImproveisedExplosiveXML().ForProperty(x => x.Name).ImplementsAttribute<SomeAttribute>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7097329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档