gpt4 book ai didi

c# - 如何防止 Visual Studio 2015 的调试器评估具有副作用的静态属性?

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:56 26 4
gpt4 key购买 nike

我有一个单例类,它在第一次调用属性时延迟创建它的实例(属性副作用)。

namespace singletontest2
{
using System.Diagnostics;
using MySingleton = Singleton<MyClass>;

public class MyClass
{
private int val = 42;

public MyClass()
{
}
}

public static class Singleton<T> where T : new()
{
private static T t;

public static bool IsNull
{
get
{
return t == null;
}
}

[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public static T Instance
{
get
{
if (t == null)
t = new T();
return t;
}
}
}

class Program
{
static void Main(string[] args)
{
var a = MySingleton.IsNull;
var d = MySingleton.Instance;
}
}
}

如果我在 Instance 中放置一个断点属性(property) setter/getter 和 var d线,t当我进入 Instance 时,成员已经被初始化 setter/getter 。

如果我从 var d 移动断点到下一行,t当我调试到 Instance 时为空 setter/getter 。

我的印象是DebuggerBrowsable属性会阻止这种情况,但似乎没有任何区别。

但是,如果我消除 using MySingleton = Singleton<MyClass>;以上并调用Singleton<MyClass>.Instance;而不是 MySingleton.Instance; , 然后是成员 t当我输入 Instance 时为空 setter/getter 不管DebuggerBrowsable这就是我想要的。

为什么是using允许调试器在代码实际执行之前评估该属性的指令?

最佳答案

关闭工具->选项->调试->启用属性评估和其他隐式函数调用,如此处所提倡:https://msdn.microsoft.com/en-us/library/0taedcee.aspx

关于c# - 如何防止 Visual Studio 2015 的调试器评估具有副作用的静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828737/

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