小编dev*_*ton的帖子

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

很快,新的 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将常量作为默认值。

.net c# properties default-value c#-6.0

9
推荐指数
2
解决办法
450
查看次数

为什么接受引用类型的泛型方法不接受可空类型作为参数?

乍看上去,

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

.net c# generics nullable value-type

4
推荐指数
1
解决办法
251
查看次数

我们应该使用 Tuple 还是 ValueTuple 作为仅引用类型的变量?

有很多问题只包含没有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>

.net c# tuples c#-7.0 valuetuple

4
推荐指数
1
解决办法
2705
查看次数

我应该在 24 小时时间格式中使用 23:59:59 还是 00:00:00 表示凌晨 12 点?

当我搜索最大时间时。人们总是通过 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.

毕竟,《黑曜石时代》根据用例很好地回答了这个问题。

.net c# datetime timespan datetime-format

3
推荐指数
1
解决办法
1万
查看次数

C# 7.0 是否支持使用 ValueTuple 作为参数的 params 关键字?

我在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 c# tuples c#-7.0 valuetuple

3
推荐指数
1
解决办法
3413
查看次数