Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改C#中的默认值(T)返回的内容?_C#_Linq_Default_Nullable - Fatal编程技术网

如何更改C#中的默认值(T)返回的内容?

如何更改C#中的默认值(T)返回的内容?,c#,linq,default,nullable,C#,Linq,Default,Nullable,我想更改某些类的默认(T)行为方式。因此,我希望返回一个null对象,而不是为我的引用类型返回null 有点像 kids.Clear(); var kid = kids.Where(k => k.Age < 10).SingleOrDefault(); if (kid is NullKid) { Console.Out.WriteLine("Jippeie"); } kids.Clear(); var kid=kids.Where(k=>k.Agek.Agek.Agek.A

我想更改某些类的默认(T)行为方式。因此,我希望返回一个null对象,而不是为我的引用类型返回null

有点像

kids.Clear();
var kid = kids.Where(k => k.Age < 10).SingleOrDefault(); 

if (kid is NullKid)
{
  Console.Out.WriteLine("Jippeie");
}
kids.Clear();
var kid=kids.Where(k=>k.Age<10.SingleOrDefault();
if(kid是NullKid)
{
Console.Out.WriteLine(“Jippeie”);
}

有人知道这是否可能吗?

我想你的问题已经得到了答案:if/switch语句。大概是这样的:

if (T is Dog) return new Dog(); 
   //instead of return default(T) which is null when Dog is a class
public static T SingleOrSpecified<T>(this IEnumerable<T> source, Func<T,bool> predicate, T specified)
{
    //check parameters
    var result = source.Where(predicate);
    if (result.Count() == 0) return specified;
    return result.Single();   //will throw exception if more than 1 item
}
您可以像这样创建自己的扩展方法:

if (T is Dog) return new Dog(); 
   //instead of return default(T) which is null when Dog is a class
public static T SingleOrSpecified<T>(this IEnumerable<T> source, Func<T,bool> predicate, T specified)
{
    //check parameters
    var result = source.Where(predicate);
    if (result.Count() == 0) return specified;
    return result.Single();   //will throw exception if more than 1 item
}

我不认为,这是可能的。但是,您可以创建自己的扩展方法
SingleOrCustomDefault
或类似的方法。

您不能更改默认值(t)-它对于引用类型始终为null,对于值类型始终为零。

如何:

var kid = kids.Where(k => k.Age < 10).SingleOrDefault() ?? new Kid();
var kid=kids.Where(k=>k.Age<10.SingleOrDefault()??新生婴儿();
有人知道这是不是真的吗 可能吗

这根本不可能

但也许你想用:

kids.Clear();
var kid=kids.Where(k=>k.Age<10).DefaultIfEmpty(NullKid.Single();
if(kid==NullKid)
{  
Console.Out.WriteLine(“Jippeie”);
}

我认为,问题仍然存在:如何从…SingleOrDefault()内部实现这一点!?这绝对是最干净的方法。更短的等价物:
var kid=kids.SingleOrDefault(k=>k.Age<10)??新生婴儿()
这个答案在细节上并不完全正确,因为bool的默认值不是零而是false(仅列出一种默认值不是零的值类型;请参阅。规范引用是。