我可能会在这里得到一些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()在对象的生命周期内引起多次调用.
我们哪个是正确的?
在深入挖掘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
我错过了什么?无论日期如何,为什么这总是返回"假"?我已经尝试将字符串转换为大写,但没有改变.