如何更改C#中的默认值(T)返回的内容?
我想更改某些类的默认(T)行为方式。因此,我希望返回一个null对象,而不是为我的引用类型返回null 有点像如何更改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
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(仅列出一种默认值不是零的值类型;请参阅。规范引用是。