2

我有许多具有许多这样的属性的类:

public AnyClass[] car
{
     get
     {
          return this.anyClassField;
     }
     set
     {
          this.anyClassField= value;
     }
}

在每个 set{} 访问器中,如果值为 null,我需要设置 isEmptyFlag=true。所以我认为可能有可能以某种方式编写静态扩展来自动执行此操作,或者可能是另一种解决方案?

4

2 回答 2

2

您可以创建通用扩展方法来检查数组是否为空或为空。

给定以下代码:

public class Foo
{
    private anyClass[] anyClassField;

    public anyClass[] car
    {
        get
        {
            return this.anyClassField;
        }
        set
        {
            this.anyClassField = value;
        }
    } 
}

public class anyClass
{
    // add properties here ....
}

您可以像这样创建扩展方法:

public static class CollectionExtensions
{
    public static bool IsNullOrEmptyCollection<T>(this T[] collection)
    {
        if (collection == null)
            return true;

        return collection.Length == 0;
    }
}

使用代码(不要忘记包含CollectionExtensions类的命名空间):

var foo = new Foo();

// returns true
bool isEmpty = foo.car.IsNullOrEmptyCollection();

// add 1 element to the array....
foo.car = new [] { new anyClass() };

// returns false
isEmpty = foo.car.IsNullOrEmptyCollection();
于 2013-09-27T08:01:26.867 回答
0

静态扩展与type相结合。我不知道您的所有类是如何结构的,但即使它们都结构完美,您也需要为每个必须表现得像这样的属性中的每个类手动添加代码。

可能是一个解决方案。我个人会选择多态解决方案:所以声明基类虚拟方法/属性就像我想要的那样,并从子类中调用它们。也因为扩展有利于扩展您无法以其他方式执行的功能(不是您的库,您不允许触摸的代码,第 3 部分库......)

另一种解决方案可能是使用AOP(面向方面​​的编程),如表单示例:

C# (.Net) 的面向方面编程 (AOP) 解决方案及其功能

但是有一个学习曲线。

于 2013-09-27T07:54:50.270 回答