14

是否可以从可用于泛型参数的可能类型集中排除特定类型?如果有怎么办。

例如

Foo<T>() : where T != bool

表示除 bool 类型之外的任何类型。

编辑

为什么?

以下代码是我尝试强制执行负面约束。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      var x1=Lifted.Lift("A");
      var x2=Lifted.Lift(true);
    }
    static class Lifted
    {
      // This one is to "exclude" the inferred type variant of the parameter
      [Obsolete("The type bool can not be Lifted", true)]
      static public object Lift(bool value) { throw new NotSupportedException(); }
      // This one is to "exclude" the variant where the Generic type is specified.
      [Obsolete("The type bool can not be Lifted", true)]
      static public Lifted<T> Lift<T>(bool value) { throw new NotSupportedException(); }
      static public Lifted<T> Lift<T>(T value) { return new Lifted<T>(value); }
    }

    public class Lifted<T>
    {
      internal readonly T _Value;
      public T Value { get { return this._Value; } }
      public Lifted(T Value) { _Value = Value; }
    }
  }
}

正如您所看到的,它涉及对正确的重载解决方案的一些信心,以及一些@jonskeet -esque 邪恶代码。

注释掉处理推断类型示例的部分,它不起作用。

拥有排除的通用约束会好得多。

4

1 回答 1

8

不,您不能使用类型约束进行一次性排除。您可以在运行时执行此操作:

public void Foo<T>()
{
     if (typeof(T) == typeof(bool))
     {
         //throw exception or handle appropriately.
     }
}
于 2012-05-17T20:10:33.227 回答