C# 对execute方法c使用替换#

C# 对execute方法c使用替换#,c#,winforms,command-substitution,C#,Winforms,Command Substitution,我是C#新手,需要一些提示来解决这个问题: 我开始用C#一个Windows窗体应用程序开发一个应用程序(直到今年夏天,我在VisualFox工作了20年) 该UI是通用的(具有用于显示当前记录详细信息的网格和控件),并且是根据存储在Xml文件中的定义动态构建的 我想为每个表创建一个类,用于创建获取默认值、验证字段和记录等的方法。我为这个类使用了一个名称空间:BmiSqlTables 现在我需要在UI中添加记录以获取默认值、验证字段等。 我所面临的问题是用类似于Foxpro中的替换来替换switc

我是C#新手,需要一些提示来解决这个问题: 我开始用C#一个Windows窗体应用程序开发一个应用程序(直到今年夏天,我在VisualFox工作了20年) 该UI是通用的(具有用于显示当前记录详细信息的网格和控件),并且是根据存储在Xml文件中的定义动态构建的

我想为每个表创建一个类,用于创建获取默认值、验证字段和记录等的方法。我为这个类使用了一个名称空间:BmiSqlTables

现在我需要在UI中添加记录以获取默认值、验证字段等。 我所面临的问题是用类似于Foxpro中的替换来替换switch-case语句,因为switch-case语句可能会变成一个非常大的语句(用于50个表)

private void GetDefaultValue ( string TableName, string fieldName)
{
switch (tableName)
{
case "person":
  BmiSqlTables.Person.GetDefaulValue( fieldName, valueType);
  break;
case "client":
  BmiSqlTables.Client.GetDefaulValue( fieldName, valueType);
  break;
default:
break
}
}
namespace BmiSqlTables
{
  public static class Person
 {
  public static dynamic GetDefaultValue( string fieldName, string valueType)
  {
  dynamic defaultValue = null;
  switch (fieldName.toLower())
  {
  case "field1":
  case "field2":
  default:
   switch (valueType.ToLower())
    {
    case "string":
    case "varchar":
    case "char:"
      return "";
    case "int":
      return 0;
    default:
      return  null;
    }
  .......
  }
  }
  }
}
在Foxpro中,GetDefaultValue可以是这样的:

Function GetDefaultValue( tableName, fieldName, valueType)
return BmiSqlTable.&tableName..GetDefaultValue( fieldName, valueType)
对这个问题(和项目)的任何建议都将是非常宝贵的。 希望你能理解我的英语,以及我需要做的事情。
提前感谢。

看看策略模式:

我知道在FoxPro中,您会将值存储在一个表中,然后使用“替换(或其他任何方式)”将其取回。在.NET中也这样做。将这些值存储在一些外部源(DB或xml文件或其他文件)中,并在方法实现中读取它们

请记住,虽然FoxPro也是一个DB引擎,您可以在.NET中免费获得数据,但您需要选择要用于数据存储的技术

对于您的特定示例,一个包含名称/值对的简单xml文件就可以了。查阅 System.Xml.XDocument提供了与Xml文档交互的多种方式之一

编辑:
如果您仍然想在代码中保存数据而不是一些外部源,考虑使用一个/多个静态字典(System .Copy.Gu泛.Digy)代替您的巨大切换情况。

希望您能理解……我需要做什么。-不,您想做什么?我想写一个通用的方法GETDebug值(在UI中),它不需要对tableName使用swich语句,也不需要在将来创建每个表名。并为tableName执行正确的方法GetDefaultValue(来自BmiSqlTables命名空间)我仅使用xml读取windows窗体定义(字段名称、标题、格式),当用户单击菜单选项(人员、客户、发票、订单等)时,这些窗体正在动态生成,用于存储数据我使用System.data.Common类,使用通用方法连接、更新数据库,无论是哪个提供程序。这是一个外部数据源的例子。您可能会考虑为此使用全DB引擎。什么样的地图适合你的应用是你自己的决定。无论如何,通过描述问题的方式,您试图将数据保存在代码中,这可能不是一个好主意。我想为我使用的任何类型的数据库更正一个代码。若我在数据库中为默认值、验证字段和记录设置了正确的代码,这对于每种数据库类型都是特定的,那个么当您只使用一个数据库引擎时,这是很好的。这就是为什么我决定在应用程序中创建代码,用于验证、获取添加记录上的默认值等。我找到了更适合解决我的问题的方法。我将创建一个类inputable,包含子类Person、Client等。现在的问题是使用表名创建实例:类似于这个inputable table=newinputable(tableName)。然后,我将能够为Person、Client或任何我需要的表执行方法。当然我不习惯使用switch语句。谢谢,我解决了我的问题。我所做的:我为模板创建一个类输入表,并为我需要的每个表创建子类。在UI中,我声明一个Dictionaryinputablesdictionary当我需要执行特定表的方法时,我使用下面的代码:dynamic it=inputablesdictionary[tableName];返回它。GetDefaultValue(fieldName,valueType);就我记忆所及,我的答案是建议使用字典,但哦,好吧。。。