我有一个方法,它有四个参数,我用来过滤我的数据,有时4个参数被填充,有时只有三个或两个或一个被填充,所以我一直在寻找一种方法来只采取必要的参数值。例如,如果用户只输入一个参数,如startDate,我想恢复该日期的所有数据,而不将其他参数作为 static void Main(string[] args)
{
string firstname = "";
string lastName = "";
string variablewithdata = "SQL injection - Wikipedia, -the free encyclopedia - Mozilla Firefox";
// variablewithdata.LastIndexOf('-') = returns Integer corresponding to the last position of that character.
//I suggest you validate if variablewithdata.LastIndexOf('-') is equal to -1 or not because if it don't found your character it returns -1 so if the value isn't -1 you can substring
firstname = variablewithdata.Substring(0, (variablewithdata.LastIndexOf('-') - 1));
lastName = variablewithdata.Substring(variablewithdata.LastIndexOf('-') + 1);
Console.WriteLine("FirstColumn: {0} \nLastColumn:{1}",firstname,lastName);
Console.ReadLine();
}
,但不应考虑它们,我的方法搜索具有正确的StartDate和其他参数AccessToken.getCurrentAccessToken().getToken();
我不想这样做
null
答案 0 :(得分:3)
选项1:过载。 创建4个方法,每个方法都有一个不同的签名,用于调用" main" -method,例如具有完整参数的方法。调用伴随着一些默认参数。
internal static List<Inconsistence> FilterList(DateTime? StartDate, DateTime? EnDate, decimal? State)
{
return FilterList(StartDate, EnDate, State, null); // Call overloaded method with Type = null
}
internal static List<Inconsistence> FilterList(DateTime? StartDate, DateTime? EnDate, decimal? State, decimal? Type)
选项2:默认值 您可以为method-parameter指定一个默认值。只有最后一个参数可以具有默认值。看起来像这样
internal static List<Inconsistence> FilterList(DateTime? StartDate, DateTime? EnDate, decimal? State, decimal? Type = null)
这个Type
- 参数是可选的。如果未在呼叫中指定,则将具有指定的默认值。在这种情况下,它是null
。
答案 1 :(得分:0)
您可以将参数设为可选:MSDN
internal static List<Inconsistence> FilterList(DateTime? StartDate, DateTime? EnDate = null, decimal? State = null, decimal? Type = null)
答案 2 :(得分:0)
我认为你可以像这样编写你的where子句:
.Where( g =>
(State.HasValue.Equals(false) || g => g.r.uir.InconsistencyStateId == State) &&
(Type.HasValue.Equals(false) || g.r.uir.InconsistencyTypeId == Type) &&
(StartDate.HasValue.Equals(false) || g.r.uir.InsDate >= StartDate) &&
(EnDate.HasValue.Equals(false) || EnDate >= g.r.uir.InsDate)
)
我没有对它进行过测试,但它应该有效。
答案 3 :(得分:0)
params
可以为您做到这一点,但您需要将值向下转换为object
将函数定义为
internal static List<Inconsistence> FilterList(params object[] list)
{
//check the size of `list` object and cast the values
(DateTime)list[0]
(double)list[1]
}
,电话会是
FilterList(DateTime.Now);
FilterList(DateTime.Now, 1.0);