小编Stu*_*gan的帖子

使用时会出现CA2213警告?(null-conditional Operator)调用Dispose

我正在实现IDisposable,并且在我Dispose()调用Dispose()其他托管资源的方法中,我正在使用?.运算符,如下所示:

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if(disposing)
        {
            _ChangeLock?.Dispose();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我仍然收到以下代码分析错误:

CA2213:'MyClass'包含IDisposable类型的字段'MyClass._ChangeLock':'ReaderWriterLockSlim'.更改"MyClass"上的Dispose方法,在此字段上调用Dispose或Close.

如果我更改为标准空检查,则代码分析警告消失:

if(_ChangeLock != null)
    _ChangeLock.Dispose();
Run Code Online (Sandbox Code Playgroud)

使用空条件运算符是否有问题,或者这个代码分析规则是否过时,或者是什么?

c# code-analysis idisposable

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

在ComboBox的ItemsPanel上方添加其他控件

我想进行搜索ComboBox,搜索框TextBox显示ItemsPanelComboBox下拉列表展开的上方.我想我需要制作一个自定义控件才能实现搜索功能,但首先我只想尝试TextBox使用普通模式进行显示ComboBox.这是我当前的尝试,当我尝试扩展下拉列表时产生异常:

<Style x:Key="FilteredComboBox" TargetType="ComboBox">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel>
                    <TextBox/>
                    <StackPanel IsItemsHost="True"
                                Orientation="Horizontal"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"/>
                    </StackPanel>

            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

这产生的例外是:

无法显式修改用作ItemsControl的ItemsPanel的Panel的Children集合.ItemsControl为Panel生成子元素.

我很确定有办法让这样做我想要的,但经过几个小时的谷歌搜索和反复试验,我的脑袋现在正在旋转.任何帮助将不胜感激!

wpf combobox textbox itemspaneltemplate

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