加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么对于int属性,IsValueType为false?

发布时间:2020-12-15 23:50:46 所属栏目:百科 来源:网络整理
导读:再见, 我对这个问题很沮丧,我创建了一个简单的类,如下所示: public class Classe{ public int Intero { get; set; } public Int32 Intero32 { get; set; } public double Double { get; set; } public string Stringa { get; set; } public Classe PerRefer
再见,

我对这个问题很沮丧,我创建了一个简单的类,如下所示:

public class Classe
{
    public int Intero { get; set; }

    public Int32 Intero32 { get; set; }

    public double Double { get; set; }

    public string Stringa { get; set; }

    public Classe PerReferenza { get; set; }
}

我编写了这个扩展方法,其目标是返回属性的引用默认值(引用的类型或值类型):

public static class TypeExtensions
{
    public static object GetDefaultValue(this Type t)
    {
        if (t.IsValueType)
            return Activator.CreateInstance(t);

        return null;
    }
}

按照我的主要方法:

static void Main(string[] args)
{
    Classe c = new Classe();

    foreach (var proprietà in c.GetType().GetProperties())
    {
        var predefinito = proprietà.GetType().GetDefaultValue();

        Console.WriteLine($"Default for {proprietà}: {predefinito ?? "NULL"}");
    }

    Console.ReadKey();
}

这是我的输出:

Default for Int32 Intero: NULL
Default for Int32 Intero32: NULL
Default for Double Double: NULL
Default for System.String Stringa: NULL
Default for ConsoleApp1.Classe PerReferenza: NULL

我无法理解为什么我总是为所有属性获得FALSE …
预期的产出是:

Default for Int32 Intero: 0
Default for Int32 Intero32: 0
Default for Double Double: 0
Default for System.String Stringa: ""
Default for ConsoleApp1.Classe PerReferenza: null

非常感谢…

解决方法

你的意思是proprietà.PropertyType.GetDefaultValue();您当前正在询问RuntimePropertyInfo是否为值类型(其中:它不是).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读