【问题标题】:Can not convert type int to T无法将类型 int 转换为 T
【发布时间】:2022-11-25 02:47:44
【问题描述】:

我遇到了一个编译器错误,我不确定如何解决它。

基本上,我有一些下面描述的枚举类。

我创建了派生自 myTool 的抽象类 myTool 和 myTools。 由于某种原因,编译器不喜欢我为 MyTools 构造构造函数的方式并抛出错误

CS0030:无法将类型 int 转换为类型 T。

请告诉我如何解决这个问题。

public enum TOOLS
{
  HAMMER =1,
  DRILL = 2,
  SCREWDRIVER =3,
  VACUUM=4
}

public enum EQUIPMENTS
{
  MOWER=1,
  TRIMMER=2,
  SNOWBLOWER=3
}

public abstract class MyTool
{
  protected T _myStuff
  int quantity
  double price
  public MyTool(T t)
  {
  _myStuff =t;
  }
  ... properties...
}

public abstract class MyTools<T>:myTool<T>
where T:System.Enum
{
  protected MyTool<T>[] _myTools;
  public MyTool<T> this[int i]=> this._myTools[i];
  public MyTools(int count, T t):base(t)
  {
    _myTools = new MyTools<T>[count];
    for (int i=0; i<count;i++)
    {
      _myTools[i]=(T)(i+1);
    }
  }
}

【问题讨论】:

  • 您正在尝试将 i+1 转换为 T。显然,这是行不通的。
  • public abstract class MyTools&lt;T&gt;:myTool&lt;T&gt; 同时拥有 MyTools&lt;T&gt; 类型和 myTools&lt;T&gt; 类型是一个非常、非常、非常糟糕的想法。真是个糟糕的主意……

标签: c#


【解决方案1】:

您可以将 int 转换为约束为 System.Enum 的泛型类型,如下所示:

T enumValue = (T)Enum.ToObject(typeof(T), intValue);

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多