如何更改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());