C#如何不实例化类即可获取public static静态属性的值
问题解答
核心问题出在两点:
- 你代码定义的
SomeInfo是字段(field),不是属性(property),调用GetProperty无法匹配到该成员,得到的someInfoProperty实际为null。 - 静态成员调用
GetValue时不需要传入实例,直接传null作为第一个参数即可。
情况1:保持SomeInfo为字段的实现
使用GetField代替GetProperty获取成员,示例代码如下:
var myClass = Type.GetType("MyNamespace.MyClass"); // 匹配公共静态字段 var someInfoField = myClass.GetField("SomeInfo", BindingFlags.Public | BindingFlags.Static); // 静态成员GetValue第一个参数传null string result = someInfoField.GetValue(null) as string;
此时result就是你要的Lorem Ipsum值。
情况2:如果后续将SomeInfo调整为属性
如果后续把代码修改为属性实现:
public static string SomeInfo { get; set; } = "Lorem Ipsum";
保留原GetProperty逻辑,仅修改GetValue的参数即可:
var myClass = Type.GetType("MyNamespace.MyClass"); var someInfoProperty = myClass.GetProperty("SomeInfo", BindingFlags.Public | BindingFlags.Static); string result = someInfoProperty.GetValue(null) as string;
注意事项
- 调用
Type.GetType时需要传入类的完整限定名,如果类位于当前程序集外,还需要补充程序集标识,否则会返回null。 - 获取成员后建议增加空判断逻辑,避免成员不存在时抛出空引用异常。
内容的提问来源于stack exchange,提问作者realmikep
相关产品推荐
相关产品推荐

