小编Jam*_*roe的帖子

迁移到.Net 4:在xaml中添加事件时抛出空引用异常

在我的工作地点,我们最近将我们的代码库从.Net 3.5升级到.Net 4(C#).遇到的大多数问题都已经解决了,但是我无法弄明白.我们通过混合使用xaml和代码来初始化控件和页面(基于开发人员首选项),但是一个页面在打开时会抛出NullReferenceException.这是一段代码片段(许多控件之一)抛出.

抛出异常的所有代码都在DataTemplate中(我认为这可能是相关的)

<TextBox x:Name="Values" Grid.Column="1" Grid.Row="0" Margin="5,2,5,2"
  Text="{Binding ElementName=Descriptions, Path=SelectedValue, UpdateSourceTrigger=PropertyChanged,
  Mode=TwoWay,        
  Converter={StaticResource EmptyConverter}}"
  GotFocus="Column_GotFocus"
  MinWidth="100"
  CharacterCasing="Upper"
  Visibility="{Binding Path=IsValueVisible, Converter={StaticResource VisibilityConverter}}" 
/>
Run Code Online (Sandbox Code Playgroud)

现在,投掷线是:

GotFocus="Column_GotFocus" 
Run Code Online (Sandbox Code Playgroud)

Column_GotFocus位于代码隐藏文件中.还有一些事实:我们在迁移之前没有遇到任何问题,异常会连续抛出,并且有三个不同的事件导致了这个问题.

投掷的三个事件是:

GotFocus="Column_GotFocus"
SelectionChanged="Descriptions_SelectionChanged"
Click="Search_Click"
Run Code Online (Sandbox Code Playgroud)

删除这些完全解决了我们的问题,但显然会导致软件出现功能问题.有谁知道可能导致这些问题的原因是什么?

编辑:

很抱歉,澄清一下:永远不会调用事件处理程序,xaml事件处理程序添加(例如GotFocus ="Column_GotFocus")似乎是抛出异常的地方.

例外是:

System.NullReferenceException occurred
  Message=Object reference not set to an instance of an object.
  Source= <assembly/namespace>
  StackTrace:
       at <assembly/namespace>.<Class>.System.Windows.Markup.IStyleConnector.Connect(Int32 connectionId, Object target) in <XamlFilePath>:line 291
  InnerException: 
Run Code Online (Sandbox Code Playgroud)

编辑2:

方法处理程序是:

    private void Column_GotFocus(object sender, RoutedEventArgs e)
    {
        ContentPresenter columnContentPresenter =(DependencyObject)sender).FindParent<ContentPresenter>();

        Column column = …
Run Code Online (Sandbox Code Playgroud)

c# xaml .net-4.0

7
推荐指数
2
解决办法
2441
查看次数

为什么使用偏离发送方和eventargs的事件处理程序方法签名是个坏主意?

VS 2012中的代码分析工具提出了我的代码的一些问题.大多数都很好,这一个(CA1009正确声明事件处理程序)然而我无法理解其推理.

如果我不需要任何数据,只是为了知道发生了什么事情,在我看来,我通过使用不需要参数的事件来模糊我的真实意图.

例如,假设我要列出符合给定条件的所有客户.如果我的存储库已更新,我需要重新检查数据.

所以我创建了一个存储库类,然后给它一个带有以下签名的DataChanged事件:

public event Action DataChanged;
Run Code Online (Sandbox Code Playgroud)

然后在其中一个使用repo的类中,我可以做

repository.DataChanged += UpdateMatchingCustomers;

private void UpdateMatchingCustomers() {
    MatchingCustomers = ...
}
Run Code Online (Sandbox Code Playgroud)

为什么这是一个坏主意?

c# code-analysis event-handling

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

有没有办法强制resharper以特定方式对齐链式方法调用

可以说我在C#中有以下代码

        var stringList = GetListOfStrings();
        var firstString = stringList.Where(s => true)
                                    .Where(s => true)
                                    .Where(s => true)
                                    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

它没有做太多,但它的格式是我喜欢的ReSharper和Resharpers Code Cleanup功能.

现在让我说我重写该代码只是调用方法GetListOfStrings而不首先将它分配给变量.在这种情况下,Resharper将其格式化如下:

            var firstString = GetListOfStrings()
                .Where(s => true)
                .Where(s => true)
                .Where(s => true)
                .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

有没有改变这个,所以ReSharper将其格式化为如下?

            var firstString = GetListOfStrings().Where(s => true)
                                                .Where(s => true)
                                                .Where(s => true)
                                                .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

如果它有任何区别,我正在使用ReSharper 8 Beta和VS 2013预览版.

resharper coding-style visual-studio

5
推荐指数
2
解决办法
1120
查看次数

部署到环境 VM 资源时标记 Azure DevOps 代理

我想在我的 VM 上安装 azure 代理,并将其显示为环境资源,如下所述:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/environments-virtual-machines?视图=azure-devops

如果您以交互方式运行脚本,那么这是有效的,但是当我使用时--unattended(如下所述: https: //learn.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows ?view=azure-devops# unattended-config)不再有指定标签的方法。该--addDeploymentGroupTags选项不适用于环境代理。

如何使用标签自动添加虚拟机作为环境资源?

azure azure-devops

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