小编LMB*_*LMB的帖子

将List <T>公开为只读的最佳方法是什么?

我多次遇到这个设计问题,从来没有找到杀手解决方案.

我想公开一个在所有者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)

c#

6
推荐指数
2
解决办法
723
查看次数

如何在 xUnit 中记录测试的执行顺序

我有一个使用 xUnit.net 的大型测试集(5k+),并且在并行运行的测试之间遇到并发问题。

xUnit 随机化测试的执行顺序,这让我更难发现问题。

我想知道是否有办法在测试执行期间记录测试开始和结束的时刻。

注意:使用构造函数和处置器方法并不能解决问题,因为您无法知道构造函数/处置器上正在运行哪个测试。

注2:如果它不明显,我正在寻找一种不涉及在每个测试中编写日志调用的解决方案。

谢谢,

c# xunit.net

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

C#类似实例的初始化语法

在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)

c#

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

是否可以在VSTS中为Build重命名或自定义名称?

是否可以在VSTS中为Build重命名或自定义名称?

我要做的是用版本号命名我的版本。版本号写在.version根目录下的文件中。

预期名称为: $(MyVersionNumber):$(Rev:rr)

powershell azure-devops azure-pipelines-build-task azure-pipelines

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