以下从DataTable获取一个字段并将其转换为字符串.有没有更简洁的方法将动态转换为字符串?
dynamic value = dataTable.Rows[i].Field<dynamic>(columnName);
value = (value == null) ? null : value.ToString();
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 75
string value = Convert.ToString(dataTable.Rows[i][columnName]);
Run Code Online (Sandbox Code Playgroud)
标准格式化将启动,而不需要像泛型,扩展方法或动态的东西.
Maw*_*rdy 12
首先,正如Marc在他的回答中提到的" 标准格式化将会启动,而不需要像泛型,扩展方法或动态 "这样的东西,所以在你的情况下你不必使用dynamic
关键字,你可以直接转换为字符串,但谈论从动态转换为字符串我有两种方式:
第一种方式
string x = Convert.toString(value) // value is a dynamic object
Run Code Online (Sandbox Code Playgroud)
专业人士:如果您不确定编译的数据类型是否支持转换为字符串,或者硬编码为int,这是一种很好的转换方式,例如,
缺点:这种方式可能会导致错误,如果你试图
Convert.toString(value) // value is a dynamic object
在扩展方法内部,当我这样做它给我这个错误:"扩展方法不能动态调度.考虑转换动态参数或调用扩展方法没有扩展方法语法".
因此,如果您使用Asp.Net Core,HttpContext.Session.SetString()
并且您Convert.ToString(value) // value is dynamic object
在争论中将其作为内联转换,它将在cons secion中给出错误,为了解决这个问题,您可以在函数参数之外为Covert.toString(value)
结果分配一个变量然后发送变量到扩展函数的争论:
dynamic value = 10;
HttpContext.Session.SetString("key",Convert.toString(value)); <-- error
Run Code Online (Sandbox Code Playgroud)
解决:
dynamic value = 10;
string x = Convert.toString(value);
HttpContext.Session.SetString("key",x); // works fine
Run Code Online (Sandbox Code Playgroud)
或者使用第二种方式(强制转换),确保编译的数据类型支持转换为字符串
HttpContext.Session.SetString("key",(string)value);
Run Code Online (Sandbox Code Playgroud)
第二种方式
投 dynamic
来string
如果编译的数据类型支持它
string x = (string)value; //value is dynamic object
Run Code Online (Sandbox Code Playgroud)
优点: - 如果你想在Extension方法中进行内联转换,那么它很有用 - 如果你想确保编译的数据类型支持转换为字符串并基于此生成异常,那么它也很有用
缺点:这不适用于所有数据类型,因此如果您想要更通用的转换方法,建议采用第一种方法
正如MS docs中所提到的那样"动态类型使其发生的操作能够绕过编译时类型检查.相反,这些操作在运行时得到解决. "
因此,dynamic
变量的数据类型在运行时编译并采用其他类型dynamic
,并且如果解释对象支持,则可以使用转换,或者Convert.toString()
用于更通用的类型转换.
PS:如果你要转换为字符串以外的数据类型,你可能会面临数据丢失,比如将float转换为int,所以要注意这一点.
归档时间: |
|
查看次数: |
59147 次 |
最近记录: |