Enumerable.SingleOrDefault方法返回的“默认值”是什么?

时间:2013-08-25 19:22:32

标签: c# entity-framework ienumerable

我写了这段代码来寻找一个'Vendedor'(推销员),它满足用户在TextBox中输入相同'codigo'(id)的条件:

using (TccContext context = new TccContext())
{
    Vendedor[] query = (from vendedor in context.Vendedores
                where vendedor.codigo == Convert.ToInt64(this.textBoxProcurarCodFuncionario.Text)
                select vendedor).ToArray();
    if (query.Length == 1)
    {
        textBoxCodigo.Text = query[0].codigo.ToString();
        textBoxNome.Text = query[0].nome;
        textBoxTotalVendaMensal.Text = query[0].totalVendaMensal.ToString();
    }
    else
    {
        MessageBox.Show("Código não encontrado,\n tente novamente...",
            "Atualizar Funcionário",
            MessageBoxButtons.OK,
            MessageBoxIcon.Error);
        this.Limpar();
    }
}

我想替换SingleOrDefault的ToArray方法,但我一直坚持:

  

返回序列的唯一元素,如果是,则返回默认值   序列是空的;如果有更多,此方法会抛出异常   比序列中的一个元素。

在这种情况下,如文档中所述的“默认值”,我希望能够对待这个“例外”,但我不知道它是什么?

有人可以解释一下这个“默认值”是什么?我刚刚开始使用Entity Framework,所以不要对我太过刻意。

提前致谢。

4 个答案:

答案 0 :(得分:3)

返回的是default(T),这意味着null表示参考类型,“0”表示值类型。

对于引用类型,

default(T)将返回null,对于数值类型,将返回零。对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。对于可以为空的值类型,default返回System.Nullable<T>,它会像任何结构一样进行初始化。

答案 1 :(得分:1)

对于可空类型,默认值为null。

对于0的整数,我认为所有其他数字也是如此。我会看看我是否能找到文档...

  

“reference和nullable类型的默认值为null。”

http://msdn.microsoft.com/en-us/library/bb342451.aspx

答案 2 :(得分:1)

可空类型和引用类型(这将是您的Vendor类)的默认值为null

对于其他类型的默认值,您可以查看此default value table。它通常为0,即使enums也是如此;如果您在enum

中手动指定了值,则可能会出现问题

答案 3 :(得分:0)

对于可空类型,它为null,对于整数,它为0

来自here: -

  

reference和nullable类型的默认值为nullptr。

     

SingleOrDefault方法不提供指定默认值的方法   值。如果要指定除以外的默认值   默认(TSource),使用   DefaultIfEmpty(IEnumerable,TSource)