3

是否有一个运算符或内置函数来简化这一点:

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 (因为我必须为所有这些. 否则我宁愿使用上面显示的函数方法。

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

3 回答 3

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("-");
于 2011-06-24T19:53:39.640 回答
1

如果基础对象始终是字符串或 DbNull,则可以使用强制转换as运算符:

private string CheckNull(object dataColumn){
    return dataColumn == (dataColumn as string)??"-":dataColumn;
}

如果值是整数或其他类型,这也将返回“-”。

从您的代码中不清楚,但如果这些值来自 DataRows,您可以使用新的 (.NET 3.5)DataRowExtensions.Field函数,该函数将返回null而不是DbNull.

于 2011-06-24T19:59:48.567 回答
0

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

或者在您使用 str1、str2、strN 等的第一个示例中,您是否有理由不能为每个示例重用 str1?我看到你的长行代码中有一个方法调用,你不想浪费时间比你需要的更频繁地运行(特别是如果它每次都会产生相同的输出)。

于 2011-06-24T19:54:32.473 回答