C# ?? system.DBNull中的运算符

C# ?? system.DBNull中的运算符,c#,asp.net,dbnull,ternary,isnullorempty,C#,Asp.net,Dbnull,Ternary,Isnullorempty,是否有一个运算符或内置函数来简化此操作: 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

是否有一个运算符或内置函数来简化此操作:

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??"-"
"-"
我想知道是否有一些(字符串)函数或运算符可以在没有if..then的情况下返回“-”if dataColumn.toString()==”(因为我必须为所有函数都生成许多if..then。否则,我宁愿使用上面显示的函数方法

string str = object1.object2.something(a,b).dataColumn.toString().if("","-");
那么:

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("-");

您可以编写一个扩展方法来调用dataColumn。不过,它在功能上与CheckNull方法没有太大区别


或者在第一个使用str1、str2、strN等的示例中,有没有一个原因使您不能对每一个都重用str1?我看到您的长代码行中有一个方法调用,您不想浪费时间运行比您需要的更多(特别是如果每次都会导致相同的输出)

private string CheckNull(object dataColumn){
    return dataColumn == (dataColumn as string)??"-":dataColumn;
}
例如,如果值是整数或其他类型,则也将返回“-”


您的代码不清楚,但是如果这些值来自数据行,您可以使用新的(.NET 3.5)函数,它将返回
null
,而不是
DbNull
,太好了!我不知道如何重写/扩展字符串函数。谢谢!