我正在使用ERP公司提供的Web服务(Infor的SyteLine 8 Web服务)。 该Web服务通过传递带有TableRow的DataTable的DataTable来使您将产品带到ERP系统。 传入的许多值都来自受限列表。

最初,我尝试通过对这些值使用Enums来解决受限列表的问题。 不幸的是,我需要使用Enums进行的许多操作都不适合Enums类型,因为它们具有“ KANBAN / JIT”或“ 040”之类的名称,这些名称在Enum中不起作用。

我尝试使用Enums的原因是因为我在代码中创建了一个POCO产品对象,该对象传递并分配值,然后将其平铺到DataTable中字符串的DataRow中,然后传递给Web服务。 这样,很容易确保我根据product.productionType = productionTypeEnum.KANBANJIT;这样的值来设置值product.productionType = productionTypeEnum.KANBANJIT;

除了使用枚举之外,还有什么其他选择,这样我就不会遇到问题了?

===============>>#1 票数:1 已采纳

您可以使用枚举,在将它们添加到DataRow之前,只需要一些方法即可将它们转换为字符串。 例如,可以将转换器实现为扩展方法:

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

public class Product
{
  public enum ProductionType
  {
    Unknown,
    KanbanJit,
    ZeroForty
  }

  private ProductionType type;

  public ProductionType Type
  {
    get { return this.type; }
    set { this.type = value; }
  }

  // ... other members of Product class ...
}

public static class ExtensionMethods
{
  public static string ToString(this Product.ProductionType productionType)
  {
    switch (productionType)
    {
      case Product.ProductionType.KanbanJit: return "KANBAN/JIT";
      case Product.ProductionType.ZeroForty: return "040";
      default: return string.Empty;
    }
  }
}

public class Program
{
  public static void Main()
  {
    // Create products, set their production type, and add them to a list
    var products = new List<Product>();
    products.Add(new Product() { Type = Product.ProductionType.KanbanJit });
    products.Add(new Product() { Type = Product.ProductionType.ZeroForty });

    // Convert the production types to string and add them to DataRow
    foreach (var product in products)
      AddProductionTypeToDataRow(product.Type.ToString());    
  }

  static void AddProductionTypeToDataRow(string productionType)
  {
    // ... implementation comes here ...
    Console.WriteLine(productionType);
  }
}

==更新==

这是另一个没有扩展方法的类型安全解决方案:

using System;
using System.Collections.Generic;

public class Product
{
  public sealed class ProductionType
  {
    private string name;
    private ProductionType(string name = null) { this.name = name; }
    public static implicit operator string(ProductionType type) { return type.name; }
    public static readonly ProductionType KanbanJit = new ProductionType("KANBAN/JIT");
    public static readonly ProductionType ZeroForty = new ProductionType("040");
    // ... other constants ...
    public static readonly ProductionType Unknown = new ProductionType();
  }

  private ProductionType type;

  public ProductionType Type
  {
    get { return this.type; }
    set { this.type = value; }
  }

  // ... other members of Product ...
}

public class Program
{
  public static void Main()
  {
    // Create products, set their production type, and add them to a list
    var products = new List<Product>();
    products.Add(new Product() { Type = Product.ProductionType.KanbanJit });
    products.Add(new Product() { Type = Product.ProductionType.ZeroForty });

    // Convert the production types to string and add them to DataRow
    foreach (var product in products)
      AddProductionTypeToDataRow(product.Type);    
  }

  static void AddProductionTypeToDataRow(string productionType)
  {
    // ... implementation comes here ...
    Console.WriteLine(productionType);
  }
}

  ask by Ben Hoffman translate from so

未解决问题?本站智能推荐:

关注微信公众号