2

C# でオブジェクトがゼロ (0) または string.empty に等しいかどうかを判断する最良の方法は何ですか?

編集:オブジェクトは、任意の組み込みの System.Value 型または参照型と同じにすることができます。

ソースコード:

public void MyMethod(object input1, object input2)
{
    bool result = false;
    object compare = new object();

    if(input != null && input2 != null)
    {
        if(input1 is IComparable && input2 is IComparable)
        {
            //do check for zero or string.empty
            //if input1 equals to zero or string.empty
            result = object.Equals(input2);

            //if input1 not equals to zero or string.empty
            result = object.Equals(input1) && object.Equals(input2); //yes not valid, but this is what I want to accomplish
        }
    }
}
4

7 に答える 7

3

ジョナサン・ホランドのコードサンプルを少し変更して使用すると、うまくいったソリューションは次のとおりです。

static bool IsZeroOrEmpty(object o1)
{
    bool Passed = false;
    object ZeroValue = 0;

    if(o1 != null)
    {
        if(o1.GetType().IsValueType)
        {
            Passed = (o1 as System.ValueType).Equals(Convert.ChangeType(ZeroValue, o1.GetType()))
        }
        else
        {
            if (o1.GetType() == typeof(String))
            {
                Passed = o1.Equals(String.Empty);
            }
        }
    }

    return Passed;
}
于 2008-11-05T18:39:33.847 に答える
2

これの何が問題になっていますか?

public static bool IsZeroOrEmptyString(object obj)
{
    if (obj == null)
        return false;
    else if (obj.Equals(0) || obj.Equals(""))
        return true;
    else
        return false;
}
于 2008-11-01T01:46:15.003 に答える
1

マイケル、ここでもう少し情報を提供する必要があります。

メソッドを使用して、文字列を null または string.Empty と比較できます。

string x = "Some String"
if( string.IsNullOrEmpty(string input) ) { ... }

int、decimal、double (およびその他の数値型) は、単純な == テストで 0 (ゼロ) と比較できます。

int x = 0;
if(x == 0) { ... }

? を使用して、null 許容値型を使用することもできます。それらをインスタンス化するときの演算子。これにより、値の型を null として設定できます。

int? x = null;
if( !x.HasValue ) {  }

他のオブジェクトの場合、単純な == null テストで null かどうかがわかります

object o = new object();
if( o != null ) { ... }   

物事に光を当てることを願っています。

于 2008-11-01T00:02:09.470 に答える
1

.Equals は参照型の参照の等価性であり、値型の値の等価性であるため、この背後にある理由はよくわかりません。

これはうまくいくようですが、あなたが望むものは疑わしいです:

    static bool IsZeroOrEmpty(object o1)
    {
        if (o1 == null)
            return false;
        if (o1.GetType().IsValueType)
        {                
            return (o1 as System.ValueType).Equals(0);
        }
        else
        {
            if (o1.GetType() == typeof(String))
            {
                return o1.Equals(String.Empty);
            }

            return o1.Equals(0);
        }
    }
于 2008-11-01T00:47:25.153 に答える
0
obj => obj is int && (int)obj == 0 || obj is string && (string)obj == string.Empty
于 2008-11-01T01:32:45.700 に答える
0

文字列について話している場合、null または string.empty を意味しますか?

if (String.IsNullOrEmpty(obj as string)) { ... 何かをする }

  • オイシン
于 2008-10-31T23:56:36.817 に答える
0

最初のケースでは、null かどうかをテストします。2 番目のケースでは、string.empty かどうかをテストします (自分の質問に答えました)。

オブジェクトが 0 になることは決してないことを付け加えておきます。ただし、オブジェクト変数は null 参照を持つことができます (実際には、変数の値が 0 であることを意味します。ただし、この場合はオブジェクトはありません)。

于 2008-10-31T23:58:02.803 に答える