我试图用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}}的实际含义/作用是什么?
答案 0 :(得分:4)
它使用命名参数。
节选:
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();
并不是在调用站点上命名参数的有用理由;在上面的示例中,在调用站点上指定了参数的名称,该示例提供了有用的信息。