作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我收到一个错误消息,“无法将字符串转换为整数?”。我觉得很奇怪,当您使用 PropertyInfo.SetValue
时,我的想法是它确实应该尝试使用该字段类型。
// Sample:
property.SetValue(model, null, null);
以上将尝试根据 Microsoft Developer Network 的 PropertyInfo.SetValue
在属性上实现 default(T)
。但是,当我执行以下代码时:
// Sample:
property.SetValue(model, control.Value, null);
错误冒泡,当我为一个应该有 int?
的属性实现 string
时,我认为它会尝试自动解析指定的类型。我将如何帮助指定类型?
// Sample:
PropertyInfo[] properties = typeof(TModel).GetProperties();
foreach(var property in properties)
if(typeof(TModel).Name.Contains("Sample"))
property.SetValue(model, control.Value, null);
任何澄清以及如何解决转换都会有所帮助。为简洁起见,对示例进行了修改,尽量提供相关代码。
最佳答案
您必须将控件值转换为属性正在使用的类型 Convert.ChangeType()
:
if(typeof(TModel).Name.Contains("Sample"))
property.SetValue(model, Convert.ChangeType(control.Value, property.PropertyType), null);
在你的例子中是 Nullable
输入 ( Nullable<int>
) 所以你必须以不同的方式来做 Convert.ChangeType()
通常不适用于 Nullable 类型:
if(typeof(TModel).Name.Contains("Sample"))
{
if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
property.SetValue(model,Convert.ChangeType(control.Value, property.PropertyType.GetGenericArguments()[0]),null);
}
else
{
property.SetValue(model, Convert.ChangeType(control.Value, property.PropertyType), null);
}
关于c# - 神圣的倒影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32636778/
1.放大缩小图片 复制代码 代码如下: public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){&nb
我是一名优秀的程序员,十分优秀!