如何为多个参数检查空字符串或空字符串? - C#
问题描述:
我有下面的方法,我需要检查参数是否为空或空。如何为多个参数检查空字符串或空字符串? - C#
public DB Where(string field, string operat, string value, string andOr, string field2, string operat2, string value2)
{
_Where = " WHERE " + field + " " + operat + " @" + field + "1 " + andOr + " " + field2 + " " + operat2 + " @" + field2 + "2 ";
_Params.Add(field + "1", value);
_Params.Add(field2 + "2", value2);
return this;
}
我已经找到了string.IsNullOrWhiteSpace方法然而这将需要这么多代码:
if (string.IsNullOrWhiteSpace(field))
throw new ArgumentException("field Cannot be null or be empty");
if (string.IsNullOrWhiteSpace(operat))
throw new ArgumentException("operat Cannot be null or be empty");
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException("value Cannot be null or be empty");
if (string.IsNullOrWhiteSpace(andOr))
throw new ArgumentException("andOr Cannot be null or be empty");
if (string.IsNullOrWhiteSpace(field2))
throw new ArgumentException("field2 Cannot be null or be empty");
if (string.IsNullOrWhiteSpace(operat2))
throw new ArgumentException("operat2 Cannot be null or be empty");
if (string.IsNullOrWhiteSpace(value2))
throw new ArgumentException("value2 Cannot be null or be empty");
有缩短这个的方法吗?
此外,我已经尝试为此任务创建一个自定义方法,但是它会在自定义方法而不是Where()方法中引发异常,从而使调试变得棘手。
答
您可以逐个检查值或创建中间函数来做到这一点。
另外,我的建议是:你可以把所有的输入数组中,并使用LINQ任何在一次检查所有的:
public DB Where(string field, string operat, string value, string andOr, string field2, string operat2, string value2)
{
string[] inputs = {field, operat, value, andOr, field2, operat2, value2}
if (inputs.Any(x => string.IsNullOrWhiteSpace(x))){
//throw exception
}
//continue with your method, all inputs are OK
}
答
我可以建议是这样的:
private string _nullChecker(string _value){
if (string.IsNullOrWhiteSpace(_value))
throw new ArgumentException(_value + "Cannot be null or be empty");
return _value;
}
然后,在你的其中string声明
_Where = " WHERE " + _nullChecker(field) + " " + __nullChecker(operat) + " @" + _nullChecker(field) + "1 " + _nullChecker(andOr) + " " + _nullChecker(field2) + " " + _nullChecker(operat2) + " @" + _nullChecker(field2) + "2 ";
不知道这个虽然。没有用实际的代码检查它。 :)希望这可以帮助
+1
或者它可能是一个扩展方法。 – tsul
答
你可以这样做:
int? GetLength(string s) {
return s == "" ? -1 : s?.Length;
}
// s1, s2 and so on are your parameters
int? lengthSum = GetLength(s1) + GetLength(s2); // and so on
int wholeLength = (s1 + s2).Length; // and so on
if(lengthSum == wholeLength) {
// No parameter is null or empty
}
答
首先,你可以使用简单的库来进行参数验证。看看这个名为Argument Validator的函数,它具有方便的功能,可以将整体代码减少一半。
这里是你如何可以使用参数验证库做一个例子:
public DB Where(string field, string operat, string value, string andOr, string field2, string operat2, string value2)
{
var inputs = new string[] {field, operat, value, andOr, field2, operat2, value2};
foreach(var input in inputs)
{
Throw.IfNullOrEmpty(input, nameof(input)));
}
}
您可以创建一个静态梅托德:'ValidateParameterNotEmpty(字符串名称,字符串值)'。您将减少行数到1/3 – xanatos
您需要做的预防SQL注入的验证将会花费更多的工作量,所以我会优先考虑。 – Crowcoder
如果该字段为空或空,那么在以您的方式抛出'ArgumentException'时不会出现任何内容。你的意思是使用['nameof'](https://msdn.microsoft.com/en-us/library/dn986596.aspx)? –