Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# 优化多参数传递给类构造函数的过程_C#_.net_Algorithm - Fatal编程技术网

C# 优化多参数传递给类构造函数的过程

C# 优化多参数传递给类构造函数的过程,c#,.net,algorithm,C#,.net,Algorithm,我正在使用C.Net和SQL server编写一个桌面应用程序。我有几个calss构造函数,每个构造函数都有几个参数,每次我都应该将它们传递给它们。以下是一个例子: Classes.Prices prices = new Classes.Prices (comboBox1.SelectedValue.ToString(), Convert.ToInt32(txtPrice.Text), Convert.ToInt32(txtCarbohydrate.Text), Co

我正在使用C.Net和SQL server编写一个桌面应用程序。我有几个calss构造函数,每个构造函数都有几个参数,每次我都应该将它们传递给它们。以下是一个例子:

 Classes.Prices prices = new Classes.Prices  
 (comboBox1.SelectedValue.ToString(),
  Convert.ToInt32(txtPrice.Text), 
  Convert.ToInt32(txtCarbohydrate.Text),   
  Convert.ToInt32(txtProtein.Text),   
  Convert.ToInt32(txtFat.Text), 
  Convert.ToInt32(txtHumidity.Text), 
  Convert.ToInt32(txtminerals.Text));
有没有办法克服这一点,并防止为转换和传递多个参数而编写大量代码
对于构造函数?

在一个方法中不应使用超过2到3个参数

定义一个名为PriceHolder的类

然后,构造函数必须接受PriceHolder的对象

像这样:

public Prices(PriceHolder hold)
{
 // access the values by hold.Fat, hold.Minerals etc
}
此方法使重构代码变得更容易,或者如果您打算添加更多属性


此外,您的程序员同事将能够轻松理解它。可读性很重要

一个方法中使用的参数不应超过2到3个

定义一个名为PriceHolder的类

然后,构造函数必须接受PriceHolder的对象

像这样:

public Prices(PriceHolder hold)
{
 // access the values by hold.Fat, hold.Minerals etc
}
此方法使重构代码变得更容易,或者如果您打算添加更多属性


此外,您的程序员同事将能够轻松理解它。可读性很重要

是的。使用数据绑定将表单绑定到对象。数据绑定会自动在两个方向上进行转换,即从字符串转换为数字和日期,然后再转换

除了具有自动转换的优点外,还可以将业务逻辑与表单分离。例如,您可以将任何逻辑应用于名为Prices.Price或Price的属性(如果该逻辑在Prices类中),而不是将其应用于Convert.ToInt32txtPrice.Text之类的构造,这使代码更易于理解和维护

为了使用数据绑定,请为类添加一个公共默认构造函数、一个不带参数的构造函数,并为每个值添加一个公共属性

public class Prices
{
    public Prices () 
    { }

    public Prices (decimal price, int carbohydrate, ...) 
    { ... }

    public decimal Price { get; set; }
    public int Carbohydrate { get; set; }
    ...
}
见:

关于developerfusion

论代码工程

处理问题的一种完全不同的方法是规范化数据。引入一个参数类,并将参数存储在Prices类的字典或列表中。这使您能够在循环中处理参数,而不必单独编程每个参数。它还有一个优点,就是可以用最少的编码进行扩展

public class Parameter
{
    public string Name { get; set; }
    public int Value { get; set; }
}

public class Prices
{
    public Prices (IEnumerable<Parameter> parameters) 
    { 
        ... 
    }
}

有。使用数据绑定将表单绑定到对象。数据绑定会自动在两个方向上进行转换,即从字符串转换为数字和日期,然后再转换

除了具有自动转换的优点外,还可以将业务逻辑与表单分离。例如,您可以将任何逻辑应用于名为Prices.Price或Price的属性(如果该逻辑在Prices类中),而不是将其应用于Convert.ToInt32txtPrice.Text之类的构造,这使代码更易于理解和维护

为了使用数据绑定,请为类添加一个公共默认构造函数、一个不带参数的构造函数,并为每个值添加一个公共属性

public class Prices
{
    public Prices () 
    { }

    public Prices (decimal price, int carbohydrate, ...) 
    { ... }

    public decimal Price { get; set; }
    public int Carbohydrate { get; set; }
    ...
}
见:

关于developerfusion

论代码工程

处理问题的一种完全不同的方法是规范化数据。引入一个参数类,并将参数存储在Prices类的字典或列表中。这使您能够在循环中处理参数,而不必单独编程每个参数。它还有一个优点,就是可以用最少的编码进行扩展

public class Parameter
{
    public string Name { get; set; }
    public int Value { get; set; }
}

public class Prices
{
    public Prices (IEnumerable<Parameter> parameters) 
    { 
        ... 
    }
}

也许这会有帮助。价格结构如下所示:

public Prices(string s, int[] values)
{
    ...
}
让我们以以下形式声明此静态方法:

private static int[] ParseInts(params TextBox[] textBoxes)
{
    return Array.ConvertAll(textBoxes, tb => int.Parse(tb.Text));
}
然后构造函数调用变成:

Prices prices = new Prices(comboBox1.SelectedValue.ToString(), 
    ParseInts(txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals));
编辑。您还可以将一组texbox存储为数组,而不是每次动态创建:

private readonly TextBox[] textBoxes = new[] { txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals };

Prices prices = new Prices(comboBox1.SelectedValue.ToString(), ParseInts(textBoxes));

也许这会有帮助。价格结构如下所示:

public Prices(string s, int[] values)
{
    ...
}
让我们以以下形式声明此静态方法:

private static int[] ParseInts(params TextBox[] textBoxes)
{
    return Array.ConvertAll(textBoxes, tb => int.Parse(tb.Text));
}
然后构造函数调用变成:

Prices prices = new Prices(comboBox1.SelectedValue.ToString(), 
    ParseInts(txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals));
编辑。您还可以将一组texbox存储为数组,而不是每次动态创建:

private readonly TextBox[] textBoxes = new[] { txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals };

Prices prices = new Prices(comboBox1.SelectedValue.ToString(), ParseInts(textBoxes));

开玩笑的,你是说单独上课?因为我已经定义了这样一个CALS?那么,我如何才能将文本框的值获取到该clas,再次进行大量编码?您可以使用hold访问这些值。fat如果我在一个方法中使用3个以上的参数,会出现什么问题?没有问题,但它是无组织的,如果您想添加更多的参数,它可能会很混乱。正如我所说,可读性很重要。开玩笑的,你是说一个单独的类?因为我已经定义了这样一个CALS?那么,我如何才能将文本框的值获取到该clas,再次进行大量编码?您可以使用hold访问这些值。fat如果我在一个方法中使用3个以上的参数,会出现什么问题?没有问题,但它是无组织的,如果您想添加更多的参数,它可能会很混乱。正如我所说的,可读性很重要。一个选项是定义一个采用字符串而不是整数的构造函数重载。一个选项是定义一个采用字符串的构造函数重载
这正是我很久以来一直在寻找的,我希望能够编写标准、高性能和专业的应用程序。关于业务逻辑的分离,我如何编写标准和优化的代码,你能给我推荐一些源代码吗?有一种称为模型-视图-控制器MVC的设计模式。Google这个术语和术语数据绑定、对象数据绑定、winforms等等。这正是我很久以来一直在寻找的,我希望能够编写标准、高性能和专业应用程序,就业务逻辑的分离提出建议,如何编写标准和优化的代码,你能给我一些参考资料吗?有一种称为模型-视图-控制器MVC的设计模式。Google这个术语和术语数据绑定、对象数据绑定、winforms等等。很好的方法,你为什么使用静态方法?举个例子。它可以很容易地被一个无参数的非静态方法所取代,即使用TextBox数组。很好的方法,你为什么使用静态方法?举个例子。它可以很容易地替换为无参数的非静态方法,即使用TextBox数组。