我正在实现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)
使用空条件运算符是否有问题,或者这个代码分析规则是否过时,或者是什么?
我想进行搜索ComboBox,搜索框TextBox显示ItemsPanel在ComboBox下拉列表展开的上方.我想我需要制作一个自定义控件才能实现搜索功能,但首先我只想尝试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生成子元素.
我很确定有办法让这样做我想要的,但经过几个小时的谷歌搜索和反复试验,我的脑袋现在正在旋转.任何帮助将不胜感激!