代码之家  ›  专栏  ›  技术社区  ›  ilMattion

为什么int属性的IsValueType为false?

  •  3
  • ilMattion  · 技术社区  · 5 年前

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

    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
    

    我不明白为什么我得到的所有属性都是假的。。。 预期产出为:

    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
    

    1 回复  |  直到 5 年前
        1
  •  11
  •   Marc Gravell    5 年前

    你是说 proprietà.PropertyType.GetDefaultValue() ; 你现在问的是 RuntimePropertyInfo 是一种值类型(它不是)。