C# 处理返回新对象的多个属性
我的项目中有很多属性(大约20个),它们返回同一类的新对象(传递了不同的参数),因此代码看起来是多余的。是否有任何方法或设计模式可以减少代码量并执行相同的操作。我做了搜索和尝试,但没有找到任何。我的代码如下: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
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值来生成新的颜色。因为这些属性通过属性被暴露,所以你需要一个他们驻留在其中的类的实例来获取这些对象。是否确实不希望它们是静态的?请提供有关正在执行的操作的详细信息。除非有正在解决的问题的上下文,否则无法提供有用的建议。感谢您的回答,让我尝试以这种方式实现。这是一种很好的方式,但唯一的问题是,当我访问这些属性时,我不知道访问了哪个属性(名称)。:-/感谢您的回答,让我尝试以这种方式实现。这是一种很好的方式,但唯一的问题是,当我访问这些属性时,我不知道访问了哪个属性(名称):-/现在,我将使用您建议的内联属性,我的代码看起来更干净。谢谢。:)现在,我将使用您建议的内联属性,我的代码看起来更干净。谢谢。:)