小编Mar*_*tin的帖子

列出<T>在更改时触发事件

我创建了一个继承List的Class EventList,每次添加,插入或删除时都触发一个Event:

public class EventList<T> : List<T>
{
    public event ListChangedEventDelegate ListChanged;
    public delegate void ListChangedEventDelegate();

    public new void Add(T item)
    {
        base.Add(item);
        if (ListChanged != null
            && ListChanged.GetInvocationList().Any())
        {
            ListChanged();
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

在片刻我将它用作这样的属性:

public EventList List
{
    get { return m_List; }
    set
    {
        m_List.ListChanged -= List_ListChanged;

        m_List = value;

        m_List.ListChanged += List_ListChanged;
        List_ListChanged();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,我可以以某种方式处理一个新的对象是否被引用或阻止它,所以我不必在setter中做事件接线?

当然,我可以将属性更改为"私有集",但我希望能够将该类用作变量.

.net c#

10
推荐指数
3
解决办法
4万
查看次数

隐式与显式StringBuilder.ToString()cethod调用

我刚刚编写了一个小单元测试,其中我使用了StringBuilder.

var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");

Assert.AreEqual(stringBuilder, "Foo");
Run Code Online (Sandbox Code Playgroud)

此测试将失败.

Expected: <Foo>
But was:  "Foo"
Run Code Online (Sandbox Code Playgroud)

但是,如果我将Assert更改为

Assert.AreEqual(stringBuilder.ToString(), "Foo");
Run Code Online (Sandbox Code Playgroud)

测试将通过.

那么隐式调用和ToString()方法的显式调用之间有什么区别?或者/这些括号(<>)代表什么?

c# stringbuilder unit-testing tostring implicit-conversion

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