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

使用 Jonathan Holland 代码示例并稍作修改,以下是有效的解决方案:

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、decimals、doubles(和其他数值类型)可以通过简单的 == 测试与 0(零)进行比较

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

您也可以使用 ? 实例化它们时的运算符。这允许您将值类型设置为 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

如果您在谈论字符串,您的意思是 null 还是 string.empty?

if (String.IsNullOrEmpty(obj as string)) { ... 做点什么 }

  • 奥辛
于 2008-10-31T23:56:36.817 回答
0

在第一种情况下,通过测试它是否为空。在第二种情况下,通过测试它是否为 string.empty (您回答了自己的问题)。

我应该补充一点,一个对象永远不能等于 0。一个对象变量可以有一个空引用(实际上这意味着变量的值为 0;虽然在这种情况下没有对象)

于 2008-10-31T23:58:02.803 回答
0
obj => obj is int && (int)obj == 0 || obj is string && (string)obj == string.Empty
于 2008-11-01T01:32:45.700 回答