gpt4 book ai didi

c# - 神圣的倒影

转载 作者:太空狗 更新时间:2023-10-29 23:30:09 25 4
gpt4 key购买 nike

我收到一个错误消息,“无法将字符串转换为整数?”。我觉得很奇怪,当您使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com