相关疑难解决方法(0)

检索方法是否应返回'null'或在无法生成返回值时抛出异常?

我有一个方法,如果找到它,它应该返回一个对象.

如果找不到,我应该:

  1. 返回null
  2. 抛出一个例外
  3. 其他

error-handling null exception

490
推荐指数
11
解决办法
14万
查看次数

返回null或空集合是否更好?

这是一个普遍的问题(但我使用的是C#),最好的方法是什么(最佳实践),对于将集合作为返回类型的方法,是否返回null或空集合?

c# collections

397
推荐指数
9
解决办法
10万
查看次数

为什么不将异常用作常规控制流?

为了避免我可以用Google搜索的所有标准答案,我将提供一个你可以随意攻击的例子.

C#和Java(和太多的人)有很多类型的一些"溢出"的行为,我不都不像(如type.MaxValue + type.SmallestValue == type.MinValue例如: int.MaxValue + 1 == int.MinValue).

但是,看到我的恶性,我会通过扩展这种行为来增加对这种伤害的一些侮辱,让我们说一个Overridden DateTime类型.(我知道DateTime密封在.NET中,但是为了这个例子,我使用的是一种与C#完全相同的伪语言,除了DateTime没有密封的事实).

被覆盖的Add方法:

/// <summary>
/// Increments this date with a timespan, but loops when
/// the maximum value for datetime is exceeded.
/// </summary>
/// <param name="ts">The timespan to (try to) add</param>
/// <returns>The Date, incremented with the given timespan. 
/// If DateTime.MaxValue is exceeded, the sum wil 'overflow' and 
/// continue from DateTime.MinValue. 
/// </returns>
public DateTime override Add(TimeSpan …
Run Code Online (Sandbox Code Playgroud)

language-agnostic exception

184
推荐指数
12
解决办法
4万
查看次数

null对象与空对象

[这是最佳实践的结果:函数应该返回null还是空对象?但我想要非常一般.]

在很多传统的(嗯...生产)C++代码,我所看到的,有写的倾向大量NULL(或类似)的检查,以测试指针.在添加NULL时,许多这些都会在发布周期结束时添加 - 检查可以快速解决由指针取消引用导致的崩溃问题 - 而且没有太多时间进行调查.

为了解决这个问题,我开始编写带有(const)引用参数的代码,而不是传递指针的(更多)常见技术.没有指针,没有检查NULL的愿望(忽略实际具有空引用的角落情况).

在C#中,存在相同的C++"问题":希望检查针对null(ArgumentNullException)的每个未知引用并NullReferenceException通过添加null检查来快速修复s .

在我看来,防止这种情况的一种方法是首先使用空对象(String.Empty,EventArgs.Empty)来避免空对象.另一个是抛出异常而不是返回null.

我刚刚开始学习F#,但看起来在那个环境中有更少的空对象.那么也许你真的不需要有很多null参考文献?

我在这里吠叫错了吗?

c# c++ null

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

空字符串的目的是什么?

对我来说,作为开发人员和用户,我发现空字符串("")无用且引起很多混乱,就像说string == char []

也许计算机需要空字符串,所以我想了解原因.

也可以看看:

.net c# java language-agnostic programming-languages

10
推荐指数
4
解决办法
1371
查看次数

我应该返回null还是抛出异常?

我在这里发现问题如果检索方法返回'null'或者当它无法产生返回值时抛出异常?是否应函数返回null或一个空对象?,但我认为我的情况完全不同.

我正在编写一个由Web服务和客户端组成的应用程序.Web服务负责访问数据并将数据返回给客户端.我设计我的应用程序是这样的:

//网络服务

try
{
   DataTable data = GetSomeData(parameter);
   return data
}
catch (OopsException ex)
{
   //write some log here
   return null; 
}
Run Code Online (Sandbox Code Playgroud)

//客户:

   DataTable data = CallGetSomeData(parameter);
   if(data == null) 
   {
      MessageBox.Show("Oops Exception!");
      return;
   }
Run Code Online (Sandbox Code Playgroud)

好吧,有一个不返回null的规则.我不认为我应该重新抛出异常并让客户端捕获SoapException.你有什么评论?有没有更好的方法来解决这个问题?

谢谢.

exception-handling exception return-value

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

为什么返回空集合被视为好习惯?

我已经阅读了几本书并看过几篇博客,讨论如何返回空集合比返回null更好.我完全理解试图避免检查,但我不明白为什么返回一个空集合比返回null更好.例如:

public class Dog{

   private List<String> bone;

   public List<String> get(){
       return bone;
   }

}
Run Code Online (Sandbox Code Playgroud)

VS

 public class Dog{

   private List<String> bone;

   public List<String> get(){
       if(bone == null){
        return Collections.emptyList();
       }
       return bone;
   }

}
Run Code Online (Sandbox Code Playgroud)

示例一将抛出NullPointerException,示例二将抛出UnsupportedOperation异常,但它们都是非常通用的异常.是什么让一个人比另一个好或坏?

另外一个选择是做这样的事情:

 public class Dog{

   private List<String> bone;

   public List<String> get(){
       if(bone == null){
        return new ArrayList<String>();
       }
       return bone;
   }

}
Run Code Online (Sandbox Code Playgroud)

但问题是,您正在为其他人可能必须维护的代码添加意外行为.

我真的在寻找解决这种困境的方法.博客上的许多人倾向于只是说没有详细解释为什么会更好.如果返回一个不可变列表是最好的做法,我可以这样做,但我想了解为什么它更好.

java collections null immutability nullpointerexception

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

如果在找不到值时为非null,则应该返回什么

我读到的每个地方都不断重新思考"永远不会返回空值",但如果在无法找到值的情况下,如果不为null,我应该返回什么?

采取以下方法

List<Customer> GetCustomerListByRoleID(Guid RoleID) {}
Run Code Online (Sandbox Code Playgroud)

在这种情况下(并且在大多数复数方法中)List<Customer>如果我们找不到我们的价值并且我们很好,那么它很容易简单地返回空.

但是在类似方法的情况下

Customer GetCustomerByID(Guid CustomerID) {}
Run Code Online (Sandbox Code Playgroud)

你没有返回空数组的奢侈.事实上你所能做的只是返回一个New Customer();但是你有一个潜在的未初始化对象(你仍然需要检查)或null.

那么在单数方法中返回null的推荐替代方法是什么?

c# null return-value

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

我应该返回空列表还是空列表?

我有一个类型实体列表,它通过Entity Framework从DB获取值.如果将null结果集作为null或空列表返回,如下所示:

    private List<Order> _myOrders;
    public List<Order> myOrder
    {
        get
        {
            return this._myOrders ?? new List<Order>();
        }
        set
        {
            this._myOrders = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何处理代码都会对表使用count()而不是"!= null"测试?什么被认为是更好的做法.我怀疑应该尝试管理属性中的空值,否则就会在整个地方编写空测试代码.

思考?

谢谢.

c# linq

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