我多次遇到这个设计问题,从来没有找到杀手解决方案.
我想公开一个在所有者class范围内可编辑的集合,但只能读取其他公共范围.
试验1:
public class MyClass
{
private List<object> _myList = new List<object>();
public IEnumerable<object> MyList { get { return _myList; } }
}
Run Code Online (Sandbox Code Playgroud)
这个问题是外部代码可以将其强制转换回来List并进行编辑,如下所示:
var x = ((List<object>)MyList);
Run Code Online (Sandbox Code Playgroud)
试验2:
public class MyClass
{
private List<object> _myList = new List<object>();
public IEnumerable<object> MyList { get { return _myList.ToList(); } }
}
Run Code Online (Sandbox Code Playgroud)
这样我们就可以防止外部修改,但会造成List多次复制的不必要开销.
试验3:
public class MyClass
{
private List<object> _myList = new List<object>();
private ReadOnlyCollection<object> _roList =
new ReadOnlyCollection<object>(_myList)
public IEnumerable<object> MyList { get …Run Code Online (Sandbox Code Playgroud) 我有一个使用 xUnit.net 的大型测试集(5k+),并且在并行运行的测试之间遇到并发问题。
xUnit 随机化测试的执行顺序,这让我更难发现问题。
我想知道是否有办法在测试执行期间记录测试开始和结束的时刻。
注意:使用构造函数和处置器方法并不能解决问题,因为您无法知道构造函数/处置器上正在运行哪个测试。
注2:如果它不明显,我正在寻找一种不涉及在每个测试中编写日志调用的解决方案。
谢谢,
在C#我可以写
var y = new List<string>(2) { "x" , "y" };
Run Code Online (Sandbox Code Playgroud)
得到一个List"x"和"y"初始化.
如何声明一个类来接受这个初始化语法?
我的意思是,我想写:
var y = new MyClass(2, 3) { "x" , "y" };
Run Code Online (Sandbox Code Playgroud) 是否可以在VSTS中为Build重命名或自定义名称?
我要做的是用版本号命名我的版本。版本号写在.version根目录下的文件中。
预期名称为: $(MyVersionNumber):$(Rev:rr)
powershell azure-devops azure-pipelines-build-task azure-pipelines