gpt4 book ai didi

.net - 在哪里检查对象是否为空?

转载 作者:行者123 更新时间:2023-12-03 13:27:48 25 4
gpt4 key购买 nike

您在哪里检查您传递给方法的对象是否为空?

在调用方法之前是否需要测试对象?还是在使用参数的方法中?

public class Program
{
public static void Main(string[] args)
{
// Check if person is null here? or within PrintAge?

PrintAge(new Person { Age = 1 });
}

private static void PrintAge(Person person)
{
// check if person is null here?

Console.WriteLine("Age = {0}", person.Age);
}
}

public class Person
{
public int Age { get; set; }
}

在两个类中进行“空”检查似乎是多余的代码。

[编辑] :在调用者或被调用者中检查 null 有什么缺点/优点?

[编辑2] : 我刚碰到 Defensive Programming它似乎提倡在被调用者中检查 null 。我想知道这是否是一种被广泛接受的做法。

最佳答案

如果你设计一个库,就会有一些方法暴露给外部世界。您应该检查此方法中的传入数据。在您不公开的方法中不需要检查,因为只有您的代码调用它们,并且它的逻辑应该处理您在调用的公开方法中接受的所有情况。

                    --------------------------
| |
| Library |
| |
------- --------- ---------- |
| | | | | | |
| Outer | | Library | | Library | |
| | ===> | Entry | ===> | Backend/ | |
| World | | Method | | Helpers | |
| | | | | | |
------- --------- ---------- |
| |
| |
--------------------------
如果您在 entry 方法中接受了提供的数据,您应该执行请求的操作并返回预期的结果,即处理所有剩余的情况。
更新
澄清图书馆内的情况。可能有空检查,但只是因为逻辑,而不是因为参数验证。库中空检查的位置有两种可能性。第一个,如果被调用的方法知道如何处理空值。
private CallingMethod()
{
CalledMethod(someData);
}

private CalledMethod(Object parameter)
{
if (parameter == null)
{
// Do something
}
else
{
// Do something else
}
}
第二种情况,如果您调用无法处理空值的方法。
private CallingMethod()
{
if (someData == null)
{
// Do the work myself or call another method
}
else
{
CalledMethod(someData);
}
}

private CalledMethod(Object parameter)
{
// Do something
}
整个想法是拒绝您无法立即处理的案件并处理 全部 其余情况正常。如果输入无效,则抛出异常。这迫使库调用者仅提供有效值,并且不允许调用者继续执行无意义的返回值(除了调用者浅化异常并继续)。

关于.net - 在哪里检查对象是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706263/

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