C# 处理返回新对象的多个属性

C# 处理返回新对象的多个属性,c#,.net,c#-4.0,properties,itext,C#,.net,C# 4.0,Properties,Itext,我的项目中有很多属性(大约20个),它们返回同一类的新对象(传递了不同的参数),因此代码看起来是多余的。是否有任何方法或设计模式可以减少代码量并执行相同的操作。我做了搜索和尝试,但没有找到任何。我的代码如下: public MyClass Prop1 { get { return new MyClass(0, 0); } } p

我的项目中有很多属性(大约20个),它们返回同一类的新对象(传递了不同的参数),因此代码看起来是多余的。是否有任何方法或设计模式可以减少代码量并执行相同的操作。我做了搜索和尝试,但没有找到任何。我的代码如下:

        public MyClass Prop1
        {
            get
            {
                return new MyClass(0, 0);
            }
        }

        public MyClass Prop2
        {
            get
            {
                return new MyClass(0, 1);
            }
        }

        public MyClass Prop3
        {
            get
            {
                return new MyClass(1, 1);
            }
        }

        public MyClass Prop4
        {
            get
            {
                return new MyClass(2, 4);
            }
        }
任何帮助都将不胜感激。谢谢

编辑:

我使用iTextSharp生成PDF,在这里我必须传递不同的颜色,因此我使用所需的颜色创建属性,并在生成PDF时使用它们。
这里
MyClass
是iTextSharp的
BaseColor
类,传递的参数是RGB值。每个属性都会生成不同的颜色。

当变量或属性的名称中包含数字时,这就是代码味道。看看是否可以替换为数组

例如:

class Example
{
    static private readonly MyClass[] _myClasses;

    static public Example()
    {
        _myClasses= new MyClass[] { new MyClass(0,0),
                                    new MyClass(0,1),
                                    new MyClass(1,1),
                                    new MyClass(2,4) };
    }

    public MyClass[] Prop
    {
        get
            {
                return _myClasses;
            }
    }
}
然后使用属性,而不是调用

var c = example.Prop1;
使用


任何时候,当变量或属性的名称中包含数字时,这就是代码的味道。看看是否可以替换为数组

例如:

class Example
{
    static private readonly MyClass[] _myClasses;

    static public Example()
    {
        _myClasses= new MyClass[] { new MyClass(0,0),
                                    new MyClass(0,1),
                                    new MyClass(1,1),
                                    new MyClass(2,4) };
    }

    public MyClass[] Prop
    {
        get
            {
                return _myClasses;
            }
    }
}
然后使用属性,而不是调用

var c = example.Prop1;
使用


让它看起来更干净的一种方法是使用内联属性

public MyClass Prop1 => new MyClass(0, 0);
public MyClass Prop2 => new MyClass(0, 1);
public MyClass Prop3 => new MyClass(1, 1);
public MyClass Prop4 => new MyClass(2, 4);
这会使它看起来更干净一些,按照@John的建议创建一个数组可以工作,但是你需要记住你有多少属性,并且它不会在intellisense中显示。一个更好的选择可能是

public MyClass Prop1 { get; } = new MyClass(0, 0);
public MyClass Prop2 { get; } = new MyClass(0, 1);
public MyClass Prop3 { get; } = new MyClass(1, 1);
public MyClass Prop4 { get; } = new MyClass(2, 4);

让它看起来更干净的一种方法是使用内联属性

public MyClass Prop1 => new MyClass(0, 0);
public MyClass Prop2 => new MyClass(0, 1);
public MyClass Prop3 => new MyClass(1, 1);
public MyClass Prop4 => new MyClass(2, 4);
这会使它看起来更干净一些,按照@John的建议创建一个数组可以工作,但是你需要记住你有多少属性,并且它不会在intellisense中显示。一个更好的选择可能是

public MyClass Prop1 { get; } = new MyClass(0, 0);
public MyClass Prop2 { get; } = new MyClass(0, 1);
public MyClass Prop3 { get; } = new MyClass(1, 1);
public MyClass Prop4 { get; } = new MyClass(2, 4);

为什么每次调用都返回一个新实例?也许你应该考虑缓存……你能使用一些集合吗?事实上,新的对象需要每次通过传递RGB值来生成新的颜色。因为这些属性通过属性被暴露,所以你需要一个他们驻留在其中的类的实例来获取这些对象。是否确实不希望它们是静态的?请提供有关正在执行的操作的详细信息。除非有正在解决的问题的上下文,否则无法提供有用的建议。为什么每次调用都返回一个新实例?也许你应该考虑缓存……你能使用一些集合吗?事实上,新的对象需要每次通过传递RGB值来生成新的颜色。因为这些属性通过属性被暴露,所以你需要一个他们驻留在其中的类的实例来获取这些对象。是否确实不希望它们是静态的?请提供有关正在执行的操作的详细信息。除非有正在解决的问题的上下文,否则无法提供有用的建议。感谢您的回答,让我尝试以这种方式实现。这是一种很好的方式,但唯一的问题是,当我访问这些属性时,我不知道访问了哪个属性(名称)。:-/感谢您的回答,让我尝试以这种方式实现。这是一种很好的方式,但唯一的问题是,当我访问这些属性时,我不知道访问了哪个属性(名称):-/现在,我将使用您建议的内联属性,我的代码看起来更干净。谢谢。:)现在,我将使用您建议的内联属性,我的代码看起来更干净。谢谢。:)