要附加到字符串的C#非空参数
我有一个如下所示的方法要附加到字符串的C#非空参数,c#,c#-4.0,parameters,uri,.net-4.5,C#,C# 4.0,Parameters,Uri,.net 4.5,我有一个如下所示的方法 public IResults GetResults( string code = "", string id = "", DateTime? registerDate = null, IEnumerable<Category> type = null, int pageNum = 1, bool all = fals
public IResults GetResults(
string code = "",
string id = "",
DateTime? registerDate = null,
IEnumerable<Category> type = null,
int pageNum = 1,
bool all = false)
{
....
........
}
public-IResults-GetResults(
字符串代码=”,
字符串id=“”,
DateTime?registerDate=null,
IEnumerable类型=null,
int pageNum=1,
bool all=false)
{
....
........
}
对于每个非null或非空参数,我希望将参数名称和值附加到URI字符串
例如,如果参数code
是一个非空的字符串
,则我希望将其作为results/?code=passedcodevalue
附加到标准URI中。如果它是空的,那么就没有必要附加它
类似地,以下是构造URI的规则:
code
或id
不为空时,将其附加到-results/?
-as
结果/?代码=abc&id=xyzregisterDate
不为空时,将其附加到-results/?
-作为
结果/?代码=abc&id=xyz®isterdate=2004-06-29键入
不为空时,将其附加到-结果/?
-作为
结果/?代码=abc&id=xyz®isterdate=2004-06-29&type=qwertypagenum
不是1时,将其附加到-results/?
-作为
结果/?代码=abc&id=xyz®isterdate=2004-06-29&type=qwerty&pagenum=5all
不为false时,将其附加到-results/?
-as
结果/?代码=abc&id=xyz®isterdate=2004-06-29&type=qwerty&pagenum=5&all=true public string GetResults(
string code = "",
string id = "",
DateTime? registerDate = null,
IEnumerable<Category> type = null,
int pageNum = 1,
bool all = false)
{
var result = "results/?";
var firstFound = false; //Used for add & to string
for (int i = 0; i < 6; i++)
{
var partial = string.Empty;
switch (i)
{
case 0:
partial = GetIfNotEmpty("code", code);
break;
case 1:
partial = GetIfNotEmpty("id", id);
break;
case 2:
partial = GetIfNotEmpty("registerDate", registerDate);
break;
case 3:
partial = GetIfNotEmpty("type", type);
break;
case 4:
partial = GetIfNotEmpty("pageNum", pageNum);
break;
default:
partial = GetIfNotEmpty("all", all);
break;
}
if (string.IsNullOrWhiteSpace(partial))
continue;
if (firstFound)
result += "&";
else
firstFound = true;
result += partial;
}
return result;
}
private string GetIfNotEmpty<T>(string name, T value)
{
if (value == null)
return string.Empty;
if (value is IEnumerable)
{
var enumerableFinalString = string.Empty;
foreach (var item in ((IEnumerable)value))
{
enumerableFinalString += item.ToString();
}
return string.Format("{0}={1}", name, enumerableFinalString);
}
return string.Format("{0}={1}", name, value.ToString());
}
公共字符串GetResults(
字符串代码=”,
字符串id=“”,
DateTime?registerDate=null,
IEnumerable类型=null,
int pageNum=1,
bool all=false)
{
var result=“results/?”;
var firstFound=false;//用于添加到字符串(&T)
对于(int i=0;i<6;i++)
{
var partial=string.Empty;
开关(一)
{
案例0:
partial=GetIfNotEmpty(“代码”,代码);
打破
案例1:
部分=GetIfNotEmpty(“id”,id);
打破
案例2:
partial=GetIfNotEmpty(“registerDate”,registerDate);
打破
案例3:
partial=GetIfNotEmpty(“type”,type);
打破
案例4:
partial=GetIfNotEmpty(“pageNum”,pageNum);
打破
违约:
部分=GetIfNotEmpty(“全部”,全部);
打破
}
if(string.IsNullOrWhiteSpace(部分))
继续;
如果(首次发现)
结果+=“&”;
其他的
firstFound=true;
结果+=部分;
}
返回结果;
}
私有字符串GetIfNotEmpty(字符串名称,T值)
{
如果(值==null)
返回字符串。空;
if(值为IEnumerable)
{
var enumerableFinalString=string.Empty;
foreach(var项目在((IEnumerable)值中))
{
enumerableFinalString+=item.ToString();
}
返回string.Format(“{0}={1}”,名称,enumerableFinalString);
}
返回string.Format(“{0}={1}”,name,value.ToString());
}
在@RyanM有几个很好的答案,谢谢!但我也在研究要泛化的非null/non-empty,以及将parametr添加到名称值集合中。如果您想要自动执行此操作的代码,那么该代码需要知道默认值。你可以通过反思获得,但这需要大量的工作: