C# 为什么int属性的IsValueType为false?

C# 为什么int属性的IsValueType为false?,c#,.net-core,C#,.net Core,再见 我对这个问题感到沮丧,我创建了一个简单的类,如下所示: 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;

再见

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

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; }
}
我编写这个扩展方法的目的是返回属性的默认值(引用类型或值类型):

以下是我的主要方法:

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
我不明白为什么我得到的所有属性都是假的。。。 预期产出为:

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
是否是值类型(它不是)。

嗨,马克,谢谢您的回答,我如何在运行时获得属性的默认值?@ilMattion,根据马克的建议,您的方法应该是正确的。@ilMattion这取决于您所说的“默认值”是什么意思。例如,您可以在属性上查找
DefaultValueAttribute
,但该元数据的存在与否都不是决定性的。如果你的意思是“属性类型的默认值”-你几乎拥有了它already@ilMattion:
proprietáPropertyType
是属性的类型
proprietá.GetType()
是属性信息的类型,即反射返回的元数据的类型。你想要第一个,非常感谢!这是一个愚蠢的问题,但我已经浪费了很多时间…谢谢相关人士:
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