-5

大家好,我最近开始使用统一的 C# 进行游戏开发,并且进展顺利。我遇到的问题不在于我的代码的功能,而在于它的编码风格。我在高中学习了 4 年的 ANSI C,所以现在当我跳到 C# 时,我真的无法使用预制类(除了我在 C 中使用的那些被称为库的类)。在这一点上,我的代码看起来与 C 非常相似,但在实现 OOP 原则方面做了一些努力。恐怕如果其他 C# 开发人员查看此代码,他们会称其为草率且不可读(无论如何,我的 C 代码并不是最优雅的,正如您将看到的那样)。我一直是一只孤独的狼,尽我最大的努力自学,希望成为一名独立开发者。所以我没有团队任务的经验。

    public void create_item(string item_name,char L_M_H,int item_cat)//function not finshed july 13th 2013 8:07pm other fuel items need to be finished. due july 14th 10:00pm
    {
        int i = 0;
        if(item_cat == FUEL)
        {
            print("item_cat is fuel");
            if(L_M_H == L)
            {
                for(i = 0;i < 5;i++)
                {//increments if fuel index has a value
                    if(l_fuel[i] != null)
                        continue;
                    if(l_fuel[i] == null)
                    {
                        l_fuel[i] = item_name;
                        Debug.Log (string.Format("Low Class Fuel: {0} Created",l_fuel[i]));
                        break;
                    }
                }
            }
            if(L_M_H == M)
            {
                for(i = 0; i < 5; i++)
                {
                    if(m_fuel[i] != null)
                    {
                        continue;
                    }
                    if(m_fuel[i] == null)
                    {
                        m_fuel[i] = item_name;

                    }
                }
            }
        }

    }

我确信有更好的方法在 C# 中执行这样的功能,但是停止开发以使用类和 C# 特定类型(如 List)来执行这些任务是否值得?我非常有兴趣从经验丰富的程序员那里获得意见,因为我完全是 C# 和 OOP 的菜鸟。

4

2 回答 2

2

是的,您的代码草率且不可读。

1 - 尊重C# 命名约定

您的方法和成员名称应该是ProperCased,所以它是public void CreateItem()

2 - 不要在不属于它们的地方使用原始类型。

这两个参数char L_M_Hint item_cat似乎都在这里用来模拟Enums.

3 - 正如其他人在评论中提到的那样,你的m_fuel事情l_fuel看起来很奇怪。确保创建适当的数据模型来表示数据。

4 - 不要for用于迭代集合。使用foreachLINQ

于 2013-07-15T20:38:02.953 回答
0
public interface IFuelUpdater {
    void UpdateFuelItemContainerSlots(string[] container, string itemName);
}

public class MediumOrLowFuelUpdater : IFuelUpdater {

    public void UpdateFuelItemContainerSlots(string[] container, string itemName){
        for(i = 0; i < container.Length; i++)
            {
                if(container[i] == null)
                {
                    container[i] = item_name;
                }
            }
    }
}

   // elsewhere

   IFuelUpdater updater = new MediumOrLowFuelUpdater();
   string[] mediumContainer = new string[6];
   string[] lowContainer = new string[6];

   updater.UpdateFuelItemSlots(mediumContainer, "*Name Goes Here*");
   updater.UpdateFuelItemSlots(lowContainer, "*Low Name Goes Here*");

如果您的代码更加面向对象,这就是您的代码的外观。这个例子非常荒谬。我想您实际上只有一个逻辑“燃料”数组,但由于其他地方的一些不当设计或一些预优化,您可能被迫在代码中包含两个。

于 2013-07-15T21:06:01.200 回答