C# 如何将枚举值转换为正确的格式?

C# 如何将枚举值转换为正确的格式?,c#,winforms,c#-4.0,C#,Winforms,C# 4.0,我有以下代码: Client data = this.controllerPacients.getById(id).AsEnumerable() .Select(row => new Client { taxcode = Convert.ToInt32(row.Field<int>("taxcode")).ToString()

我有以下代码:

Client data = this.controllerPacients.getById(id).AsEnumerable()
                .Select(row => new Client
                           { 
                             taxcode = Convert.ToInt32(row.Field<int>("taxcode")).ToString()

                           })
               .Single();

我不得不用一个不恰当的答案来回答这个问题。。。我将把你的问题分解,并解释为什么这是一个可怕的问题

在代码中:

Client data = this.controllerPacients.getById(id).AsEnumerable()
                .Select(row => new Client
                           { 
                             taxcode = Convert.ToInt32(row.Field<int>("taxcode")).ToString()

                           })
               .Single();
Client data=this.controllerPacients.getById(id).AsEnumerable()
.选择(行=>新客户端
{ 
taxcode=Convert.ToInt32(row.Field(“taxcode”)).ToString()
})
.Single();
。。。你没有解释清楚。以下是几点:

a)
controllerPacients
是一个类级属性,您拼写错误,它可能隐藏了一个强制转换,这意味着我们永远无法看到堆栈溢出的错误。您应该提供完整的代码,或者用解释来填补任何空白

b)
getById(id)
返回一些类似数组的类型,但我们看不到它是什么。在这种情况下使用
anemumerable
会产生严重的代码味道。是否有一种方法可以直接从getById结果中选择,或者通过getById结果的属性访问看似行集合的内容

c) 两万五千名演员。。。如果字段是一个
int
,并且您的类有一个
字符串
,只需使用
.ToString()
,就不需要进行所有转换

您可能应该考虑在客户端类上创建一个方法,该方法将患者作为参数,并将其值从该值加载,而不是从原始患者的数据源加载。例如
Client.LoadTaxCodeFromPatient(Patient)

e) 您必须将
Single()

很抱歉这样打断你的问题,但有时我必须:)

解决方案是:

Client data = this.controllerPacients.getById(id).AsEnumerable().Select(row => new Client {
   taxcode = Convert.ToInt32(row["taxcode"])
}).Single();
其中
Single()从结果数据表中提取第一行。通过字段的键获取值:

Convert.ToInt32(row["taxcode"])

是否要先使用括号执行整数转换:
taxcode=(Convert.ToInt32(row.Field(“taxcode”)).ToString()
?我不确定,因为我不理解错误的含义。但我假设问题在于类型。这是
Client
a类字符串属性中的
taxcode
吗?转换顺序决定分配给该属性时的结果类型,请确保
ToString
是最后一个要处理的。异常可能来自任何地方-请提供整个stacktrace。除此之外,您是否检查过数据库中的int列不可为null?@user35738:您是否尝试过使用调试器?查看
对象内部,检查“taxcode”字段的实际值类型。我可以演示
此.controllerPacients.getById的结果。更新的问题是另一行有效:
日期出生=行.field(“日期出生”).ToString()
Convert.ToInt32(row["taxcode"])