gpt4 book ai didi

c# - 更实用的方法是否意味着更少的空引用异常?

转载 作者:行者123 更新时间:2023-11-30 20:32:36 27 4
gpt4 key购买 nike

在查看 pluralsite course 之后由 Jason Roberts 撰写,我正在尝试将我们的一些代码库转换为更具功能性的风格。

例如,如果我们有:

    var request = new RetrieveAttributeRequest
{
EntityLogicalName = EntityTypeDictionary.First(kvp => kvp.Key.Name == entityTypeName).Value,
LogicalName = attributeName
};

var response = (RetrieveAttributeResponse) _organizationService.Execute(request);

我可以简单地将光标放在请求上,然后使用 ctrl+alt+N resharper shortcut结果将是:

        var response = (RetrieveAttributeResponse) _organizationService.Execute(new RetrieveAttributeRequest
{
EntityLogicalName = EntityTypeDictionary.First(kvp => kvp.Key.Name == entityTypeName).Value,
LogicalName = attributeName
});

另一个例子:

我们从:

    var request = new RetrieveAttributeRequest
{
EntityLogicalName = EntityTypeDictionary.First(kvp => kvp.Key.Name == entityTypeName).Value,
LogicalName = attributeName
};

var response = (RetrieveAttributeResponse) _organizationService.Execute(request);

var attribute = response.AttributeMetadata;
var type = attribute.AttributeType;
var logicalName = attribute.LogicalName;

在替换所有内容之后:

    var logicalName = ((RetrieveAttributeResponse) _organizationService.Execute(new RetrieveAttributeRequest
{
EntityLogicalName = EntityTypeDictionary.First(kvp => kvp.Key.Name == entityTypeName).Value,
LogicalName = attributeName
})).AttributeMetadata.LogicalName;

问题

用内联等效项替换变量是否会提高代码安全性并减少空引用指针异常?

最佳答案

您一开始并没有检查空指针。如果您的代码类似于:

var response = (RetrieveAttributeResponse) _organizationService.Execute(request);

if(response==null) throw ArgumentNullException();
var attribute = response.AttributeMetadata;

然后 resharper 不会提供相同的建议。我认为更流畅的方法是内联您的 null 处理以符合您的期望。例如扩展方法。

var response = _someObject.FluidComposition(...).ExceptionIfNUll().ExecuteSomething();

var response = _someObject.FluidComposition(...).EmptyIfNUll().ExecuteSomething();

您可以清楚地看到上面的预期行为,但是,它只定义了操作的预期内容,而不是您将拥有的空指针异常的数量。

关于c# - 更实用的方法是否意味着更少的空引用异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41146213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com