C# 合并对象的属性以返回null或object?
我正在尝试创建一个允许我检查对象属性的扩展。如果属性不等于我需要属性等于的值(或多个属性),它将返回null对象。如果它相等,它将返回相同的对象。我的项目中有很多地方需要在多个类和属性上完成这项工作,因此尽可能少地使用代码(除了支持代码的扩展) 例如,我有一个具有Age属性的类。任何年龄超过55岁但低于60岁的人都将返回空值。任何年龄在55岁以下和60岁以上的人都将返回该对象C# 合并对象的属性以返回null或object?,c#,linq,C#,Linq,我正在尝试创建一个允许我检查对象属性的扩展。如果属性不等于我需要属性等于的值(或多个属性),它将返回null对象。如果它相等,它将返回相同的对象。我的项目中有很多地方需要在多个类和属性上完成这项工作,因此尽可能少地使用代码(除了支持代码的扩展) 例如,我有一个具有Age属性的类。任何年龄超过55岁但低于60岁的人都将返回空值。任何年龄在55岁以下和60岁以上的人都将返回该对象 //将person的对象设置为null,以便以后可以检测出其中的错误 变量person=person.somextna
//将person的对象设置为null,以便以后可以检测出其中的错误
变量person=person.somextname(p=>p.Age>=55和p.Age p.Age<55 | | p.Age>60);
我尝试过几种不同的方法,但似乎无法确定
任何帮助都会很棒。publicstatictproperty?If(此TProperty propValue,Func验证器){
public static TProperty? If<TProperty>(this TProperty propValue, Func<TProperty,Boolean> validator) {
return propValue != default(TProperty) && validator( propValue ) ?
propValue : default(TProperty);
}
返回propValue!=默认值(TProperty)&验证程序(propValue)?
propValue:默认值(TProperty);
}
可以这样使用:
class Person {
public Int32 Age;
}
////
Person p = new Person() { Age = 25; }
Int32? age = p.Age.If( pv => pv < 55 && pv > 60 );
班级人员{
32岁的公众;
}
////
个人p=新人(){Age=25;}
Int32?年龄=p.age.If(pv=>pv<55&&pv>60);
请注意,同时处理引用类型和值类型会使其更加复杂。如果您添加了泛型类型约束,就可以更容易地遵循。publicstatictproperty?If(此TProperty propValue,Func验证器){
返回propValue!=默认值(TProperty)&验证程序(propValue)?
propValue:默认值(TProperty);
}
可以这样使用:
class Person {
public Int32 Age;
}
////
Person p = new Person() { Age = 25; }
Int32? age = p.Age.If( pv => pv < 55 && pv > 60 );
班级人员{
32岁的公众;
}
////
个人p=新人(){Age=25;}
Int32?年龄=p.age.If(pv=>pv<55&&pv>60);
请注意,同时处理引用类型和值类型会使其更加复杂。如果您添加了泛型类型约束,就可以更容易地遵循。publicstatictproperty?If(此TProperty propValue,Func验证器){
返回propValue!=默认值(TProperty)&验证程序(propValue)?
propValue:默认值(TProperty);
}
可以这样使用:
class Person {
public Int32 Age;
}
////
Person p = new Person() { Age = 25; }
Int32? age = p.Age.If( pv => pv < 55 && pv > 60 );
班级人员{
32岁的公众;
}
////
个人p=新人(){Age=25;}
Int32?年龄=p.age.If(pv=>pv<55&&pv>60);
请注意,同时处理引用类型和值类型会使其更加复杂。如果您添加了泛型类型约束,就可以更容易地遵循。publicstatictproperty?If(此TProperty propValue,Func验证器){
返回propValue!=默认值(TProperty)&验证程序(propValue)?
propValue:默认值(TProperty);
}
可以这样使用:
class Person {
public Int32 Age;
}
////
Person p = new Person() { Age = 25; }
Int32? age = p.Age.If( pv => pv < 55 && pv > 60 );
班级人员{
32岁的公众;
}
////
个人p=新人(){Age=25;}
Int32?年龄=p.age.If(pv=>pv<55&&pv>60);
请注意,同时处理引用类型和值类型会使其更加复杂。如果您添加了泛型类型约束,则可以更容易地遵循。作为一个单行线:
public static T NullOrDefaultIfFalse<T>(this T self, Func<T,bool> conditionFunc)
{
return conditionFunc(self) ? self : default(T);
}
public static T nullordefaultifalse(此T self,Func conditionFunc)
{
返回条件func(self)?self:默认值(T);
}
用法:
var person = person.NullOrDefaultIfFalse(p => p.Age < 55 || p.Age > 60); //Takes advantage of type parameter inference
var person=person.nullordefultifalse(p=>p.Age<55 | | p.Age>60)//利用类型参数推断
作为一条直线:
public static T NullOrDefaultIfFalse<T>(this T self, Func<T,bool> conditionFunc)
{
return conditionFunc(self) ? self : default(T);
}
public static T nullordefaultifalse(此T self,Func conditionFunc)
{
返回条件func(self)?self:默认值(T);
}
用法:
var person = person.NullOrDefaultIfFalse(p => p.Age < 55 || p.Age > 60); //Takes advantage of type parameter inference
var person=person.nullordefultifalse(p=>p.Age<55 | | p.Age>60)//利用类型参数推断
作为一条直线:
public static T NullOrDefaultIfFalse<T>(this T self, Func<T,bool> conditionFunc)
{
return conditionFunc(self) ? self : default(T);
}
public static T nullordefaultifalse(此T self,Func conditionFunc)
{
返回条件func(self)?self:默认值(T);
}
用法:
var person = person.NullOrDefaultIfFalse(p => p.Age < 55 || p.Age > 60); //Takes advantage of type parameter inference
var person=person.nullordefultifalse(p=>p.Age<55 | | p.Age>60)//利用类型参数推断
作为一条直线:
public static T NullOrDefaultIfFalse<T>(this T self, Func<T,bool> conditionFunc)
{
return conditionFunc(self) ? self : default(T);
}
public static T nullordefaultifalse(此T self,Func conditionFunc)
{
返回条件func(self)?self:默认值(T);
}
用法:
var person = person.NullOrDefaultIfFalse(p => p.Age < 55 || p.Age > 60); //Takes advantage of type parameter inference
var person=person.nullordefultifalse(p=>p.Age<55 | | p.Age>60)//利用类型参数推断