希望更好地理解编码标准

时间:2016-12-18 09:49:22

标签: c# asp.net

我安装了CodeCracker

这是我原来的方法。

//Add
public bool AddItemToMenu(MenuMapper mapperObj)
{
    using (fb_databaseContext entities = new fb_databaseContext())
    {
        try
        {
            FoodItem newItem = new FoodItem();
            newItem.ItemCategoryID = mapperObj.ItemCategory;
            newItem.ItemName = mapperObj.ItemName;
            newItem.ItemNameInHindi = mapperObj.ItemNameinHindi;
            entities.FoodItems.Add(newItem);
            entities.SaveChanges();

            return true;
        }
        catch (Exception ex)
        {
            //handle exception
            return false;
        }
    }
}

这是CodeCracker推荐的方法。

public static bool AddItemToMenu(MenuMapper mapperObj)
{
    using (fb_databaseContext entities = new fb_databaseContext())
    {
        try
        {
            var newItem = new FoodItem
            {
                ItemCategoryID = mapperObj.ItemCategory,
                ItemName = mapperObj.ItemName,
                ItemNameInHindi = mapperObj.ItemNameinHindi,
            };

            entities.FoodItems.Add(newItem);
            entities.SaveChanges();

            return true;
        }
        catch (Exception ex)
        {
            //handle exception
            return false;
        }
    }
}
  • 据我所知,当应用程序初始化时静态方法会占用内存,无论它们是否被调用。
  • 当我知道返回类型时,为什么我应该使用var关键字。
  • 为什么这种对象初始化方式更好。

我很高兴得到这些答案,因为它可以指导我很长一段路。

再添加一种方法: -

private string GeneratePaymentHash(OrderDetailMapper order)
{
    var payuBizzString = string.Empty;

    payuBizzString = "hello|" + order.OrderID + "|" + order.TotalAmount + "|FoodToken|" + order.CustomerName + "|myemail@gmail.com|||||||||||10000";
    var sha1 = System.Security.Cryptography.SHA512Managed.Create();

    var inputBytes = Encoding.ASCII.GetBytes(payuBizzString);
    var hash = sha1.ComputeHash(inputBytes);

    var sb = new StringBuilder();
    for (var i = 0; i < hash.Length; i++)
    {
        sb.Append(hash[i].ToString("X2"));
    }
    return sb.ToString().ToLower();
}

5 个答案:

答案 0 :(得分:4)

  

据我所知,当应用程序初始化时静态方法会占用内存,无论它们是否被调用。

所有方法都这样做。您可能会将此与静态字段混淆,静态字段即使没有创建类的实例也会占用内存。通常,如果一个方法可以是静态的,那么它应该是静态的,除非它是一个接口的实现。

  

当我已经知道返回类型时,为什么我应该使用var关键字。

避免在同一行代码上指定两次类型。

  

为什么这种Object初始化方法更好?

因为它可以直观地对作业进行分组,并减少它们周围的混乱,使其更容易阅读。

答案 1 :(得分:1)

  1. 静态方法不会占用比实例方法更多的内存。此外,您的方法应该是静态的,因为它不会以任何方式依赖自身(this)作为实例。

  2. 使用var最有可能提高可读性。 var总是只有3个字母,而许多类型的字母长得多,可以沿着这条线强制变量的名称。

  3. 对象初始化程序最可能是因为没有变量名前缀所有属性而具有可读性。这也意味着您的所有作业都会立即完成。

  4. 在大多数情况下,您使用的这个工具似乎是让代码更易读和干净。在某些情况下,更改会通过向编译器暗示您的意图来提高性能,但一般来说,这是关于能够一目了然地理解代码。

    如果您实际遇到性能问题,请仅关注自己的性能。如果 遇到性能问题,请使用一些分析工具来衡量应用程序性能,并找出代码的哪些部分运行缓慢。

答案 2 :(得分:1)

  

据我所知,静态方法在应用程序时占用内存   无论是否被调用,都要进行初始化。

对于所有类型的方法都是如此,所以这是无关紧要的。

  

当我已经知道返回类型时,为什么我应该使用var关键字。

var是个人偏好(syntactic sugar)。这个分析器可能会认为,因为返回类型已经知道,所以不需要明确使用类型,因此,我建议使用var代替。 Personaly,我尽可能地使用var。对于此问题,您可能需要阅读Use of var keyword in C#

  

为什么这种Object初始化方法更好。

不能说对象初始值设定项总是更好但是对象初始化耗材要求newItemnull完全初始化因为你的;

var newItem = new FoodItem
{
    ItemCategoryID = mapperObj.ItemCategory,
    ItemName = mapperObj.ItemName,
    ItemNameInHindi = mapperObj.ItemNameinHindi,
};

实际等于

var temp = new FoodItem();
newItem.ItemCategoryID = mapperObj.ItemCategory;
newItem.ItemName = mapperObj.ItemName;
newItem.ItemNameInHindi = mapperObj.ItemNameinHindi;
var newItem = temp;

所以,和你的第一个相同。关于此主题的Code Review有一个很好的答案。 https://codereview.stackexchange.com/a/4330/6136您也可以查看:http://community.bartdesmet.net/blogs/bart/archive/2007/11/22/c-3-0-object-initializers-revisited.aspx

答案 3 :(得分:0)

其中很多是个人偏好,但大多数编码标准允许其他程序员更轻松地阅读您的代码。

将静态方法更改为实例更多地利用了OO概念,它限制了混合状态的数量,并且还允许您添加接口,以便模拟该类进行测试。

var关键字仍然是静态类型的,但因为我们应该专注于命名并使我们的对象更有意义,因此明确声明类型变得多余。

对于对象初始化,这只是对设置对象所需的所有内容进行分组。只是让它更容易阅读。

答案 4 :(得分:0)

  

据我所知,当应用程序初始化时静态方法会占用内存,无论它们是否被调用。

从未调用的方法可能会也可能不会被优化,具体取决于编译器,调试与发布等。静态与非静态并不重要。

不需要this引用的方法可以(和IMO应该)是静态的。

  

当我已经知道返回类型时,为什么我应该使用var keyword

没理由。没有区别;做你喜欢的事。

  

为什么这种Object初始化方法更好。

对于大多数实际用途,对象初始值设定项语法生成相同的代码(有关详细信息,请参阅答案@SonerGönül)。主要是偏好问题 - 我个人认为对象初始化器语法更容易阅读和维护。