Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
接受名称或ID作为参数的C#函数_C# - Fatal编程技术网

接受名称或ID作为参数的C#函数

接受名称或ID作为参数的C#函数,c#,C#,请让我知道如何编写接受名称或ID作为参数的C#函数 使用此函数的ie用户可以向函数传递Id或名称 我试过了 getdetails(string name,Guid id) 但这会要求用户使用重载的两个必要参数。一个主要函数将包含所有业务逻辑和其他将使用不同重载的函数。 如果您没有一个地方同时需要这两个属性,那么就不需要使用public void getdetails(字符串名,Guid?id) 注意:您需要小心地执行此操作,以避免含糊不清的函数调用 public void getdetails

请让我知道如何编写接受名称或ID作为参数的C#函数

使用此函数的ie用户可以向函数传递Id或名称

我试过了

getdetails(string name,Guid id)

但这会要求用户使用重载的两个必要参数。一个主要函数将包含所有业务逻辑和其他将使用不同重载的函数。 如果您没有一个地方同时需要这两个属性,那么就不需要使用
public void getdetails(字符串名,Guid?id)

注意:您需要小心地执行此操作,以避免含糊不清的函数调用

public void getdetails(string name, Guid? id)
{
  // logic
  if(name != null){}
  if(id.HasValue){}
}

public void getdetails(string name){
  getdetails(name,null);
}

public void getdetails(Guid id){
   getdetails(null,id);
}

通常,您要查找的术语是“函数重载”。您可以定义这两个术语:

GetDetails(string name);
GetDetails(Guid id);
如果两者都可用,甚至可以添加另一个选项:

GetDetails(string name, Guid id);
在对象内部,这些函数可以调用公共共享代码,它们唯一的区别是如何处理输入。在.NET的最新版本中,您可以使用可选参数将它们组合成单个函数:

GetDetails(string name = "", Guid id = new Guid())
在这种情况下,您必须检查函数中的
新Guid()
的“神奇值”。因此,虽然签名在某种程度上看起来更干净,但代码在另一方面可能更糟糕。另外值得注意的是,使用这种方法时,两个值都是可选的,因此从技术上讲,这两个值都不是必需的。这可能会让它变得不那么清晰,所以我选择前面的函数重载选项


关键是,您对此有可用的选项,如果您发现以其他方式编写的代码不清楚或难以维护,您应该确保使用正确的选项。

它被称为。@untivent我需要强制提供其中一个参数。。因为在您的代码中,这两个参数都是可选的“不是吗??将第一个方法私有化是否更有意义?当您同时需要这两个方法时会发生什么?如果没有,那么应该删除第一个函数,并实现另外两个函数。如果你这样做,它应该是公开的。如果你需要两者,那么绝对要公开。但是如果你只需要一个或另一个(这是我在问题中的假设),请将其设置为私有或按你所说的删除。其中任何一个参数都应该强制提供..因为在你的第二个代码中,这两个参数都是可选的是“nt it???@shiv455:很好。我会在答案中记下这一点。在这种情况下,重载(编写两个函数)是真的要走的路。但我只需要一个函数,我们不能使用对象类型作为参数???请纠正我,如果我wrong@shiv455:为什么只需要一个函数?到目前为止,您给出的设计要求需要两个。您可以为
字符串
Guid
使用
对象
参数(这通常被称为“拳击”),但这将是一个非常糟糕的设计。