Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 合并对象的属性以返回null或object?_C#_Linq - Fatal编程技术网

C# 合并对象的属性以返回null或object?

C# 合并对象的属性以返回null或object?,c#,linq,C#,Linq,我正在尝试创建一个允许我检查对象属性的扩展。如果属性不等于我需要属性等于的值(或多个属性),它将返回null对象。如果它相等,它将返回相同的对象。我的项目中有很多地方需要在多个类和属性上完成这项工作,因此尽可能少地使用代码(除了支持代码的扩展) 例如,我有一个具有Age属性的类。任何年龄超过55岁但低于60岁的人都将返回空值。任何年龄在55岁以下和60岁以上的人都将返回该对象 //将person的对象设置为null,以便以后可以检测出其中的错误 变量person=person.somextna

我正在尝试创建一个允许我检查对象属性的扩展。如果属性不等于我需要属性等于的值(或多个属性),它将返回null对象。如果它相等,它将返回相同的对象。我的项目中有很多地方需要在多个类和属性上完成这项工作,因此尽可能少地使用代码(除了支持代码的扩展)

例如,我有一个具有Age属性的类。任何年龄超过55岁但低于60岁的人都将返回空值。任何年龄在55岁以下和60岁以上的人都将返回该对象


//将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)//利用类型参数推断