我需要在运行时确定类属性的属性类型,以便在赋值之前执行数据转换。我在上面看到了很多答案,比如:
Using PropertyInfo to find out the property type
但是很明显,我肯定做错了什么,因为下面的测试代码总是下降到默认情况:
public class MyClass
{
public int? Id { get; set; }
public string Seller { get; set; }
public DateTime? PaymentDate { get; set; }
public double? PaymentAmount { get; set; }
public string PaymentMethod { get; set; }
}....
还有测试代码。
string s = "";
PropertyInfo[] propertyInfos = typeof(MyClass).GetProperties();
...
foreach (PropertyInfo propertyInfo in propertyInfos)
{
switch (propertyInfo.PropertyType)
{
case Type _ when propertyInfo.PropertyType == typeof(string):
s = "It's a string!";
break;
case Type _ when propertyInfo.PropertyType == typeof(int):
s = "It's an int!";
break;
case Type _ when propertyInfo.PropertyType == typeof(double):
s = "It's a double!";
break;
case Type _ when propertyInfo.PropertyType == typeof(DateTime):
s = "It's a datetime!";
break;
default:
...
break;
}
}
...
返回Id、Seller等.的propertyInfo,但开关中没有匹配的。我只需要识别类中每个属性的类型。
我也尝试过使用TypeCode,但也没有运气,因为变量tc总是有对象的值,但不确定为什么:
Type pt = propertyInfo.PropertyType;
TypeCode tc = Type.GetTypeCode( pt );
switch (tc)
{
case TypeCode.DateTime:
s = "DateTime";
break;
case TypeCode.Int32:
s = "Int";
break;
case TypeCode.String:
s = "String";
break;
default:
s = "string";
break;
}
这两种方法我都做错了什么?
发布于 2022-03-22 17:49:02
在您的类中,您的属性如下
public int? Id { get; set; }
但是在你的开关里你在检查这个案子
case Type _ when propertyInfo.PropertyType == typeof(int):
问题是typeof(int?) != typeof(int)
您需要为您的可空类型添加大小写。
https://stackoverflow.com/questions/71576343
复制相似问题