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

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

有一些像

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

任何人都知道这是否可能?

任何人都知道这是否可能?

根本不可能。

但也许您想要使用DefaultIfEmpty :

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

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

我不认为,这是可能的。 然而,你可以做的是创建自己的扩展方法SingleOrCustomDefault或类似的东西。

这个怎么样:

 var kid = kids.Where(k => k.Age < 10).SingleOrDefault() ?? new Kid(); 

我想你已经在你的问题中找到了答案:if / switch statement。 像这样的东西:

 if (T is Dog) return new Dog(); //instead of return default(T) which is null when Dog is a class 

您可以像这样制作自己的扩展方法:

 public static T SingleOrSpecified(this IEnumerable source, Func 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 } 

用法:

 var p = allProducts.SingleOrSpeficied(p => p.Name = "foo", new Product());