是否有操作员或内置功能来简单地解决这个问题:
myVal = object1.object2.something(a,b).dataColumn.toString()==""?object1.object2.something(a,b).dataColumn.toString():"-";
我知道我可以这样做:
string str = object1.object2.something(a,b).dataColumn.toString();
myVal =str==""?"-":str;
但我有很多物品,我想避免它:
string str1 = object1.object2.something(a,b).dataColumn1.toString();
myVal1==""?str1:"-"
string str2 = object1.object2.something(a,b).dataColumn2.toString();
myVal2==""?str2:"-"
:
string strN = object1.object2.something(a,b).dataColumnN.toString();
myValN==""?strN:"-"
我也可以创建一个函数:
private string CheckNull(object dataColumn){
return dataColumn == System.DBNull?"-":dataColumn.toString();
}
myVal1 = CheckNull(object1.object2.something1(a,b).dataColumn.toString())
myVal2 = CheckNull(object1.object2.something2(a,b).dataColumn.toString())
myVal3 = CheckNull(object1.object2.something3(a,b).dataColumn.toString())
最简单的方法是使用??运算符但问题是'dataColumn'与?不兼容?因为有时会返回system.DBNull而不是null。查看即时窗口输出:
System.DBNull??"-"
'System.DBNull' is a 'type', which is not valid in the given context
null??"-"
"-"
我想知道是否有一些(字符串)函数或运算符可以返回“ - ”如果dataColumn.toString()==“”没有if..then(因为我必须做很多if..then为所有这些。否则我宁愿使用上面显示的函数方法。
string str = object1.object2.something(a,b).dataColumn.toString().if("","-");
答案 0 :(得分:3)
怎么样:
public static class StringHelper {
public static string ValueOrDash(this string value) {
return string.IsNullOrEmpty(value) ? "-" : value;
}
}
然后你可以这样做:
myVal = object1.object2.something(a,b).DataColumn.ToString().ValueOrDash();
或者更好:
public static class StringHelper {
public static string ValueOrWhatever(this string value, string defaultValue) {
return string.IsNullOrEmpty(value) ? defaultValue : value;
}
}
myVal = object1.object2.something(a,b).DataColumn.ToString().ValueOrWhatever("-");
答案 1 :(得分:1)
如果底层对象是总是一个字符串或DBNull的,则可以使用as
铸造操作者:
private string CheckNull(object dataColumn){
return dataColumn == (dataColumn as string)??"-":dataColumn;
}
如果值是整数,例如或某种其他类型,这也将返回“ - ”。
从您的代码中不清楚,但如果这些值来自DataRows,您可以使用新的(.NET 3.5)DataRowExtensions.Field
函数,该函数将返回null
而不是DbNull
答案 2 :(得分:0)
您可以编写一个扩展方法来调用dataColumn。但是,它与CheckNull方法在功能上并没有太大的不同。
或者在您的第一个例子中使用str1,str2,strN等,是否有理由不能重复使用str1?我看到你在你的长行代码中有一个方法调用,你不想浪费时间比你需要的更频繁地运行(特别是如果它每次都会产生相同的输出)。