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