c#字符串到必要类型的转换

本文关键字:类型 转换 字符串 | 更新日期: 2023-09-27 18:02:51

我有以下情况。让我们说我接收字符串值的列表。我必须将这些值分配给Model中的特定类型属性。模型的例子:

    public int ID { get; set; }
    public DateTime? Date { get; set; }

在类型转换中没有问题,因为我使用System获得属性类型数组。反射和使用转换。ChangeType(字符串值,类型)。但是,我不能赋值Convert。ChangeType结果模型属性,因为它返回的对象不是我想要的值类型。我的问题的一个简短的例子:

string s1 = "1";
string s2= "11-JUN-2015";
PropertyInfo[] matDetailsProperties = Model.GetType().GetProperties();
List<Type> types = new List<Type>();
        foreach(var item in Model)
        {
            types.Add(item.PropertyType);
        }
Model.ID = Convert.ChangeType(s1, types[0]);
Model.Date = Convert.ChangeType(s2, types[1]);

这不能作为转换。ChangeType返回对象,我不能只使用(dateTime)Convert.ChangeType(…),这是"脏代码",因为我有17个不同类型的属性模型。如果我可以使用(Type[0])Convert.ChangeType(…)就太好了,但是在c#

c#字符串到必要类型的转换

中是不可能的。

您可以使用反射。像这样的怎么样?

var prop = Model.GetType().GetProperty("ID");
var propValue = Convert.ChangeType(s1, types[0]);
if (prop != null && prop.CanWrite)
{
    prop.SetValue(Model, propValue, null);
}

我建议您使用TryParse(string, out DateTime)

int tempId=default(int);
DateTime tempDate=DateTime.Min;
int.TryParse(s1,out tempId);
DateTime.TryParse(s2,out tempDate);
Model.ID = tempId;
Model.Date = tempDate;

您不需要使用Convert.ChangeType。只需使用函数内部的现有解析器,以简单的方式创建模型:

private static Model PopulateModel(IEnumerable<string> rawData)
{
    return new Model
    {
        ID = int.Parse(rawData[0]),
        Date = DateTime.Parse(rawData[1]),
        ...
    };
}