这怎么可能不平等?

时间:2010-08-12 15:19:06

标签: c# excel interop .net-2.0

  1. 我的目标:从Excel Range中提取一个值,并验证这些单元格的值在此范围内是否相同;
  2. 当一个单元格的值与另一个单元格的值不同时,我需要返回null。
  3. 这是一段代码:

    internal object GetValueFromCells(string start, string end, Formats format) {
        // Verifying for empty or null parameters here and throwing accordingly...
    
        try {
            Range cells = Excel.get_Range(start, end) as Range;
    
            object value = null;
            bool sameValue = false;
    
            foreach(Range cell in cells) {
                // This condition block shall execute only once, since 'value' shall not be null afterwards.
                if (value == null || value == DBNull.Value)
                    if (Formats.Formated == format) {
                        value = cell.Text;
                        // The following results to be false !?...
                        sameValue = value == cell.Text; // Shall this not be true?
                    } else {
                        value = cell.Value2;
                        // The following results to be false !?...
                        sameValue = value == cell.Value2; // Shall this not be true?
                    }
    
                // This results being always false!?...
                // Shall this not be true, I wonder?
                sameValue = Formats.Formated == format ? value == cell.Text : value == cell.Value2; 
    
                if(!sameValue)
                    return null;
            }
    
            return value;
        } catch (Exception ex) {
            // Exception handling...
        }
    }
    

    读取这段代码时,我会谦卑地期望当范围内的所有单元格具有相同的值(例如334)时返回一个值。

    但是,此方法始终返回null(在Visual Basic中为Nothing)!

    任何人都可以解释我在这里失踪的内容:

    value == cell.Value2
    

    总是返回 false

    也许我的算法不太正确?

    编辑#1

    这解决了这个问题:

    sameValue = Formats.Formatted == format ? cell.Text.Equals(value) : cell.Value2.Equals(value);
    

    我接受了@Jerod Houghtelling的回答,因为他的回答表明了解决问题的ToString()和Equals()方法。

    除此之外,我不喜欢调用ToString()方法,因为值可以是数字,比较字符串下的数字对我来说很奇怪。所以我更喜欢我在解决方案中采用的Equals()方法。

    我要感谢@Sir Gallahad和@Jerod Houghtelling的好答案。这是我第一次面对这样的情况,他们都帮助我更好地了解幕后发生的事情,以及其他通过评论做出贡献的人。

    感谢那些赞成我问题的人。这有助于证明我不是那么愚蠢的要求! = P呵呵呵......

2 个答案:

答案 0 :(得分:3)

value == cell.Value2可能正在比较来自不同实例的对象。

尝试value.ToString() == cell.Value2.ToString()

答案 1 :(得分:3)

我猜测cell.Value2每次调用它时都会返回一个对象的新实例。因此,我推断==正在检查以查看等式的两边是否是对象的同一个实例。要实际比较双方存储的值,您必须使用.Equals或将值转换为可比较的值,例如字符串。

sameValue = value.Equals( cell.Value2 ); 
/* or */
sameValue = value.ToString() == cell.Value2.ToString();

我也没有在你的例子中看到value被设置。