gpt4 book ai didi

c# - 更改后如何获取自动实现属性 C# 6.0 的默认编译时值?

转载 作者:行者123 更新时间:2023-11-30 13:29:38 24 4
gpt4 key购买 nike

不久,新的 C# 6.0 自动实现属性使我们能够做到这一点

    public static bool IsSoundEffects { get; set; } = true;   // C# 6.0 allows this

现在在某个地方,我更改了属性 IsSoundEffects = false,因此访问它将是 false。

嗯,那么如何获得真正的默认编译时自动实现的属性值。

类似的东西:
Type.GetPropertyDefaultValue(IsSoundEffects);//真正的编译时一个 = 是的

default(IsSoundEffects)   // idk, something like that

Why I need that?

因为我从数据库中填充属性。如果用户需要恢复默认值,则恢复它。例如设置。

看起来很奇怪?我搜索了足够多,但所有关于自动实现功能的示例都没有恢复默认值。

已编辑

提供的最佳方法

xiangbin.pang answer for reflection way [Short-One]

Christopher answers for constants as default values.

最佳答案

  1. 例如实例属性,新建一个实例然后获取默认属性值是最简单的方法。
  2. 对于静态属性,可以在静态构造函数中保留默认值。
    public static class MyClass
{
public static int MyProp1 { get; set; } = 100;
public static bool MyProp2 { get; set; } = false;

private static Dictionary<string, object> defaultValues;

static MyClass()
{
defaultValues = new Dictionary<string, object>();

foreach(var prop in typeof(MyClass).GetProperties(BindingFlags.Static| BindingFlags.Public | BindingFlags.NonPublic))
{
defaultValues[prop.Name] = prop.GetValue(null);
}
}

public static (T,bool) GetDefault<T>(string propName)
{
if(defaultValues.TryGetValue(propName, out object value))
{
return ((T)(value), true);
}
return (default, false);
}
}

//test codes
static void Main(string[] args)
{

MyClass.MyProp1 = 1000;
MyClass.MyProp2 = true;

var defaultValueOrProp1 = MyClass.GetDefault<int>("MyProp1");
if(defaultValueOrProp1.Item2)
{
Console.WriteLine(defaultValueOrProp1.Item1);//100
}

var defaultValueOrProp2 = MyClass.GetDefault<bool>("MyProp2");
if (defaultValueOrProp2.Item2)
{
Console.WriteLine(defaultValueOrProp2.Item1);//false
}
}



问题作者添加的以下行:

为属性设置默认值

private static void ResetPropertyValue(string PropertyName)
{
typeof(Options).GetProperty(PropertyName).SetValue(null,
defaultValues[PropertyName]);
}

关于c# - 更改后如何获取自动实现属性 C# 6.0 的默认编译时值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com