我无法弄清楚两个简单代码之间的区别

时间:2019-07-11 02:04:02

标签: c#

我试图用C#语言编写一个简单的代码,而我的编译器Visual Studio建议使用另一种版本的代码,我无法理解其中的区别。

这是我的初衷:

        public void addCard(Card card)
        {
            foreach (Card inDeckCard in cardDeck)
            {
                if (card.name == inDeckCard.name)
                {
                    return;
                }
            }
            cardDeck.Add(card);
        }

这是编译器建议的:

        public void addCard(Card card)
        {
            foreach (Card inDeckCard in cardDeck)
            {
                if (card.name == inDeckCard.name)
                {
                    return;
                }
            }
            cardDeck.Add(item: card);
        }

item:和没有item:之间有什么区别。在这种情况下,{{1}}的实际含义/作用是什么?

2 个答案:

答案 0 :(得分:4)

它使用命名参数。

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

节选:

  

PrintOrderDetails(“礼品店”,31,“红色杯子”); *

     

如果您不记得参数的顺序但知道它们的名称,则可以按任何顺序发送参数。*

     

PrintOrderDetails(orderNum:31,productName:“ Red Mug”,sellerName:“ Gift Shop”); *

     

PrintOrderDetails(产品名称:“红色杯子”,卖方名称:“礼品店”,orderNum:31); *

不确定CardDeck是什么类型,以及Add方法的调用签名是什么,但是item: card说card参数必须与item参数匹配。

答案 1 :(得分:0)

在语义上,根本没有 差异。

从语法上讲,VS提出了一种替代方案,可以为开发人员提供更多信息。

使用命名参数,您可以在调用代码中同时处理可选参数和非可选参数,尽管在调用站点上大多数使用命名参数的地址都可以使用可选参数,并且不需要排序参数。

事实上,诸如ReSharper之类的工具将建议按名称寻址非可选参数是多余的。就是说,当您使用的API不在良好的API设计范围内时,按名称处理非可选参数可能很有用。例如,当开发人员在呼叫站点读取“ {坏”方法ValidateStuff()并没有提供任何价值时,boolean会使用shouldCheckCreditCardScore参数,例如ValidateStuff(false) vs. ValidateStuff(true)

ValidateStuff(shouldCheckCreditCardScore: false) vs. ValidateStuff(shouldCheckCreditCardScore: true)

并没有告诉你任何事情。但是

item

提供了更多信息。从语义上讲,您的示例在每种情况下都执行相同的操作。我认为$supply = new DataSupplyProcess; if($request->hasFile('supply_photo')){ $photo = Validator::make($request->all(), [ 'supply_photo' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); if($photo->fails()){ return redirect()->back()->with('warning', 'Image size should be 2MB or less'); } $image = $request->file('supply_photo'); $image_name = rand().'.'. $image->getClientOriginalExtension(); $destination_path = public_path('/item'); $image->move($destination_path, $image_name); //dd($image); } $supply->item = $request->item; $supply->supply_details = $request->supply_details; $supply->tgl_request_date = $request->tgl_need_date; $supply->tgl_need_date = $request->tgl_need_date; $supply->employee_id = $id; $supply->id_approved_by = $manager->employee_manager_id; $supply->is_approved = 0; $supply->is_final_approved = 0; $supply->supply_photo = $image_name; $supply->save(); 并不是在调用站点上命名参数的有用理由;在上面的示例中,在调用站点上指定了参数的名称,该示例提供了有用的信息。