很快,新的 C# 6.0 Auto-Implemented Property 允许我们做到这一点
public static bool IsSoundEffects { get; set; } = true; // C# 6.0 allows this
Run Code Online (Sandbox Code Playgroud)
现在在某个地方,我更改了属性IsSoundEffects = false,因此访问它是错误的。
嗯,那么如何获得实际的实际默认编译时自动实现的属性值。
类似的东西 :
Type.GetPropertyDefaultValue(IsSoundEffects); // 一个真正的编译时 one = true
或者
default(IsSoundEffects) // idk, something like that
Run Code Online (Sandbox Code Playgroud)
为什么我需要那个?
因为我从数据库中填充了属性。并在用户需要恢复默认值时恢复它。例如设置。
看起来很奇怪?我进行了足够的搜索,但所有关于自动实现功能的示例都没有恢复默认值。
已编辑
提供的最佳方法
xiangbin.pang对反思方式的回答【短篇一】
Christopher将常量作为默认值。
乍看上去,
public static class Conversion
{
public static T Read<T>(object value) where T :class
{
if (value is DBNull) return null;
if (value is null) return null;
if (value is Enum) return (T)Enum.Parse(typeof(T), value.ToString(), true);
return (T)Convert.ChangeType(value, typeof(T));
}
}
Run Code Online (Sandbox Code Playgroud)
当调用一个Read<T>函数
var myVariable = Conversion.Read<bool?>(Row[nameof(IsFetchNextRecordAfterDelete)]);
Run Code Online (Sandbox Code Playgroud)
错误 CS0452 类型“布尔?” 必须是引用类型才能将其用作泛型类型或方法“Conversion.Read(object)”中的参数“T”
想知道为什么? 布尔?可以为空,这意味着它是一个引用类型,并且声明了泛型方法where T : class
有很多问题只包含没有GCTuple(class)压力的情况下与ValueTuple(struct)
All gone with之间的差异。但我不明白为什么要接受所有数据类型?为什么不只接受设计为结构的结构。ValueTupleValueTupleValueTuple
乍看上去。将引用类型与 ValueTuple 一起使用是否安全且性能更高?
例子
ValueTuple<CarClass, EngineClass> CarBody
或者我们应该去吗
Tuple<CarClass, EngineClass> CarBody
我看到的所有示例都包含ValueTuple<int, int, long, structs only>它是否仅用于此目的?我使用的许多代码都使用ValueTuple<ReferenceTypes>
当我搜索最大时间时。人们总是通过 VS 调试器来回答这个问题。即 23:59:59.9999999
因为我需要 24 种格式的凌晨 12 点。我猜应该是 00:00:00 但是... C# .NET 假设如下:
var xx = DateTime.MaxValue.ToString("HH:mm:ss.fffffff");
Run Code Online (Sandbox Code Playgroud)
调试之前的时候会打印23:59:59.9999999
我应该用什么?有关系吗?有什么不同?
应该使用00:00:00吗 ?或23:59:59.9999999特别是在 SQL-Server 中保存时间时。
大问题或者我的意思是,当您通过hh:mm:ss 将24 小时格式转换为 12 小时格式时,最终用户的行为11:59:59 PM 会很糟糕,不是吗?它应该是12:00:00 AM.
毕竟,《黑曜石时代》根据用例很好地回答了这个问题。
我在StackOverflow中搜索,没有找到任何文章或与之相关的任何内容。
例如,下面的示例描述了ValueTuple数组
(string CategoryName, params string[] Properties)[] MyArrayValueTupleParameter // Compile-Time Syntax error
Run Code Online (Sandbox Code Playgroud)
请注意,前面的示例用作参数。不是一个变量。
但只有string[]在没有参数的情况下才有效?我在这里错过了什么或者默认情况下不支持它吗?
乍看上去:
这有效
void ShowAppearanceCategories((string CategoryName, string[] Properties)[] VisibleCategories)
{
foreach (var Row in PropertyGridControl.Rows)
{
var VisibleCategory = VisibleCategories.FirstOrDefault(x => x.CategoryName == Row.Name);
if (VisibleCategory != default)
{
foreach (var ChildRow in Row.ChildRows)
{
if (VisibleCategory.Properties.Any(x => ChildRow.Name.Contains(x)))
{
ChildRow.Visible = false;
}
}
}
else
{
Row.Visible = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用
void ShowAppearanceCategories((string CategoryName, params string[] Properties)[] …Run Code Online (Sandbox Code Playgroud) .net ×5
c# ×5
c#-7.0 ×2
tuples ×2
valuetuple ×2
c#-6.0 ×1
datetime ×1
generics ×1
nullable ×1
properties ×1
timespan ×1
value-type ×1