首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取类属性c#的类型

获取类属性c#的类型
EN

Stack Overflow用户
提问于 2022-03-22 17:19:38
回答 1查看 104关注 0票数 0

我需要在运行时确定类属性的属性类型,以便在赋值之前执行数据转换。我在上面看到了很多答案,比如:

Using PropertyInfo to find out the property type

但是很明显,我肯定做错了什么,因为下面的测试代码总是下降到默认情况:

代码语言:javascript
复制
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; }
}....

还有测试代码。

代码语言:javascript
复制
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总是有对象的值,但不确定为什么:

代码语言:javascript
复制
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;
}

这两种方法我都做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-22 17:49:02

在您的类中,您的属性如下

代码语言:javascript
复制
public int? Id { get; set; }

但是在你的开关里你在检查这个案子

代码语言:javascript
复制
case Type _ when propertyInfo.PropertyType == typeof(int):

问题是typeof(int?) != typeof(int)

您需要为您的可空类型添加大小写。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71576343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档