小编CDo*_*ove的帖子

使用函数调用时,C#6.0的默认属性值如何分配并受范围影响?

我可能会在这里得到一些downvotes,但我实际上通过正常搜索发现了相互矛盾的信息,并希望得到其他人也能轻易找到的确定答案.

给出当前C#中的属性:

public static IEnumerable<string> foo { get; set; } = new string[] { "bar", "bar2" };
Run Code Online (Sandbox Code Playgroud)

我们知道默认值foo将返回上面的数组.如果指定了其他值,则不再使用默认值.但是,如果案例是:

public static IEnumerable<string> foo { get; set; } = GetMyStrings();
Run Code Online (Sandbox Code Playgroud)

我的想法是这个功能如下:

if(foo == null) { foo = GetMyStrings();}
Run Code Online (Sandbox Code Playgroud)

并且foo将保留从GetMyStrings()对象生命周期的第一次运行开始的值,除非被手动赋值.

我的同事坚持认为这可能是一个GC问题,并且结果GetMyStrings()会超出范围并被收集,"重新整理"参数并GetMyStrings()在对象的生命周期内引起多次调用.

我们哪个是正确的?

c# garbage-collection c#-6.0

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

带有Format数组的DateTime.TryParseExact()始终返回false

在深入挖掘SO之后,我仍然没有看到这里发生的事情.

 string[] Formats = new string[] { "dd MMM YYYY HH:mm:ss:fff", "YYYY-MM-dd hh:mm:ss:fff" };
                    DateTime t = new DateTime();

                    if (DateTime.TryParseExact(
                        dataItem.Trim(), 
                        Formats ,                         
                        System.Globalization.DateTimeFormatInfo.InvariantInfo,
                        System.Globalization.DateTimeStyles.None, 
                        out t)
                        == false)
                        return false;
                        else
                        return DoOtherStuff(dataItem);
Run Code Online (Sandbox Code Playgroud)

传入的数据" dataItem"是一个string.传入的文本如下所示:

2016年1月2日13:15:49:447

我错过了什么?无论日期如何,为什么这总是返回"假"?我已经尝试将字符串转换为大写,但没有改变.

.net c# datetime parsing

-1
推荐指数
1
解决办法
44
查看次数

标签 统计

c# ×2

.net ×1

c#-6.0 ×1

datetime ×1

garbage-collection ×1

parsing ×1