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」が ?? と互換性がないことです。null の代わりに system.DBNull を返すことがあるためです。即時ウィンドウ出力を見てください。

System.DBNull??"-"
'System.DBNull' is a 'type', which is not valid in the given context
null??"-"
"-"

if..then なしで 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 に答える