【问题标题】:Is There A Simple Way to Convert These String Values To Enum?有没有一种简单的方法可以将这些字符串值转换为枚举?
【发布时间】:2016-02-28 00:27:02
【问题描述】:

我正在开发一个股票交易应用程序,该应用程序利用经纪人的 dll 文件和命令通过 API 发出请求。最大的挑战(至少对我来说)是弄清楚如何为 API 提供输入所需的各种数据类型。现在我正在编写一些可以购买 1 股股票的测试代码。我已经能够弄清楚许多必要的转换,但枚举仍然让我难以理解。

        InsertOrderRequest insertOrderRequest = new InsertOrderRequest();
        insertOrderRequest.m_accountNumber = "00000001";
        insertOrderRequest.m_symbolId = Convert.ToUInt64(1900028);
        insertOrderRequest.m_quantity = Convert.ToDouble(1);
        insertOrderRequest.m_orderType = "Market"; //Needs to be enum
        insertOrderRequest.m_timeInForce = "Day"; //Needs to be enum
        insertOrderRequest.m_action = "Buy"; //Needs to be enum
        insertOrderRequest.m_primaryRoute = "AUTO";

您可以看到我标记为“需要枚举”的 3 行。现在我进入对象浏览器并确定“Market”、“Day”和“Buy”是适当的响应,但它们不是正确的数据类型。是否有类似于“Convert.ToDouble()”的代码行将这些从字符串转换为枚举?谢谢。

【问题讨论】:

  • 您是否为OrderType, TimeInForce, and Action 定义了Enum?你也可以展示一下吗?
  • API 需要 stringint 值?您的程序可以使用枚举作为其中任何一个。
  • 在可能的副本中查看我的答案,了解您可以通过枚举来回转换所做的所有事情。

标签: c#


【解决方案1】:

如果字符串与枚举中的名称匹配,您可以像这样解析它们:

(OrderType) Enum.Parse(typeof(OrderType), "Market");

另外,您还可以使用TryParse 版本。两个版本都有重载来在匹配名称时忽略大小写。

如果字符串与枚举中的名称不匹配,则必须创建自己的映射器。可以使用一个简单的开关盒来完成。

【讨论】:

  • VS 似乎很喜欢。让我完成测试订单的设置,我会看看它是否执行。非常感谢!
猜你喜欢
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
相关资源
最近更新 更多