未调用重载的setter将字符串分配给枚举字段

时间:2018-02-28 23:25:16

标签: c# enums

使用一个使用本土实体框架的应用程序作为引用的DLL(无源代码),我必须使用其方法访问SQL数据,如:

var allMyClasses = EF.ReadTable<MyClass>("select a, b, c from myTable")

此调用返回IList<MyClass>。每当MyClass有一个字符串成员(可以从预定义列表中获取值)时,我很想将其重构为enum,如下所示:

enum Things{ Something, Anotherthing }

class MyClass{
  public int a {get; set;}
  public Things b {get; set;}

  public void set_b(string value)
  {
    if(Enum.TryParse(value, out Things th))
    {
      b = th;
    }
    else throw new ArgumentException("Unsupported thing: {}", th);
  }

  public string c {get; set;}
}

我的假设是,只要有b的重载setter使用了string参数,从DB检索到的字符串到enum Things的转换应该是自动的。相反,我不断收到运行时异常:

  

System.ArgumentException:&#39;类型&#39; System.String&#39;的对象不可能是   转换为&#39; Things&#39;。&#39;

这是本土EF的一个缺点,它不知道如何将string分配给enum。有没有办法在我的代码中解决这个问题而不需要写几行代码?

0 个答案:

没有答案