代码之家  ›  专栏  ›  技术社区  ›  Anindya Chatterjee

如何指定不实现特定接口的类型参数?

  •  6
  • Anindya Chatterjee  · 技术社区  · 14 年前

    我已经为对象开发了一些扩展方法,对于实现IEnumerable的对象,我不希望用IntelliSense来使用/显示这些方法。从概念上讲,我想要如下的东西

    public static T SomeMethod<T>(this object value) where T != IEnumerable
            {
    
            }
    

    是否有可能在C中施加这种约束?

    编辑

    对不起,我把问题搞错了。我知道c中的允许约束,我想知道的是,如果有其他方法可以实现这一点?

    6 回复  |  直到 14 年前
        1
  •  13
  •   Jon Skeet    14 年前

    • where T : struct
    • where T : class
    • where T : SomeClassName
    • where T : ISomeInterfaceName
    • where T : U
    • where T : new()

        2
  •  1
  •   Steve Townsend    14 年前
        3
  •  0
  •   SLaks    14 年前

        4
  •  0
  •   James Black    14 年前

        5
  •  0
  •   Jon Hanna    14 年前

    derivedClass.method() baseClass.method() derivedClass

    public static T SomeMethod<T>(this object value) where T != IEnumerable
    {
      if(typeof(T).GetInterface("IEnumerable") != null)
      {
        //behaviour appropriate for IEnumerable
      }
      else
      {
        //other behaviour.
      }
    }
    

        6
  •  0
  •   Jordão    14 年前

    public static class XmlSerializableExtension {   
      public static string ToXml(this object self) { 
        // ...
      }
    }
    

    public interface MXmlSerializable { } 
    public static class XmlSerializable {   
      public static string ToXml(this MXmlSerializable self) {
        // ...
      }
    }
    

    "mixin"

    public class MyClass : MXmlSerializable { 
      // ...
    }