Click here to Skip to main content
15,896,368 members
Home / Discussions / C#
   

C#

 
QuestionSave Word document to database (using OpenXML) Pin
dennieku11-Dec-11 21:37
dennieku11-Dec-11 21:37 
AnswerRe: Save Word document to database (using OpenXML) Pin
Luc Pattyn12-Dec-11 1:09
sitebuilderLuc Pattyn12-Dec-11 1:09 
AnswerRe: Save Word document to database (using OpenXML) Pin
Eddy Vluggen12-Dec-11 9:59
professionalEddy Vluggen12-Dec-11 9:59 
Questionself-initializing static reference types within the definition of the struct ? Pin
BillWoodruff11-Dec-11 15:51
professionalBillWoodruff11-Dec-11 15:51 
AnswerRe: self-initializing static list of instances of a struct within the definition of the struct: I though this was illegal Pin
Luc Pattyn11-Dec-11 16:14
sitebuilderLuc Pattyn11-Dec-11 16:14 
GeneralRe: self-initializing static list of instances of a struct within the definition of the struct Pin
BillWoodruff11-Dec-11 17:06
professionalBillWoodruff11-Dec-11 17:06 
AnswerRe: self-initializing static list of instances of a struct within the definition of the struct Pin
Luc Pattyn11-Dec-11 17:21
sitebuilderLuc Pattyn11-Dec-11 17:21 
AnswerRe: self-initializing static reference types within the definition of the struct ? Pin
DaveyM6911-Dec-11 22:52
professionalDaveyM6911-Dec-11 22:52 
BillWoodruff wrote:
interesting you cannot use the "==" operator on two instances of a struct

Yes and no...

A class can be automatically tested for equality by comparing the reference (pointer) to it, obviously a struct has no reference so has no always defined value.

The reference comparison for classes is pretty much useless without some kind of inlining in most cases so if equality needs to be tested then overloading the == and != operators, and bool Equals(object) and int GetHashCode() methods need to be overriden, something like:
C#
public class TestClass
{
    private int value;

    public TestClass(int value)
    {
        this.value = value;
    }

    public int Value
    {
        get { return value; }
    }

    public static bool operator ==(TestClass first, TestClass second)
    {
        bool result = false;
        if (object.ReferenceEquals(first, second))
            result = true;
        else
            if (!(object.ReferenceEquals(null, first) || object.ReferenceEquals(null, second)))
                result = first.value == second.value;
        return result;
    }
    public static bool operator !=(TestClass first, TestClass second)
    {
        return !(first == second);
    }
    public override bool Equals(object obj)
    {
        bool result = false;
        TestClass other = obj as TestClass;
        if (!object.ReferenceEquals(null, other))
            result = value == other.value;
        return result;
    }
    public override int GetHashCode()
    {
        return value;
    }
}

If you implement the same operators and override the same methods on a struct you can use == etc, in fact the implementation is easier as there is no need for null checking on value types! :
C#
public struct TestStruct
    {
        private int value;

        public TestStruct(int value)
        {
            this.value = value;
        }

        public int Value
        {
            get { return value; }
        }

        public static bool operator ==(TestStruct first, TestStruct second)
        {
            return first.value == second.value;
        }
        public static bool operator !=(TestStruct first, TestStruct second)
        {
            return !(first == second);
        }
        public override bool Equals(object obj)
        {
            bool result = false;
            if (obj is TestStruct)
                result = value == ((TestStruct)obj).value;
            return result;
        }
        public override int GetHashCode()
        {
            return value;
        }
    }

Dave

Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.
Astonish us. Be exceptional. (Pete O'Hanlon)

BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)



GeneralRe: self-initializing static reference types within the definition of the struct ? Pin
BillWoodruff12-Dec-11 11:41
professionalBillWoodruff12-Dec-11 11:41 
GeneralRe: self-initializing static reference types within the definition of the struct ? Pin
BobJanova13-Dec-11 23:19
BobJanova13-Dec-11 23:19 
GeneralRe: self-initializing static reference types within the definition of the struct ? Pin
DaveyM6914-Dec-11 1:46
professionalDaveyM6914-Dec-11 1:46 
GeneralRe: self-initializing static reference types within the definition of the struct ? Pin
BobJanova14-Dec-11 3:48
BobJanova14-Dec-11 3:48 
QuestionWorking On Communication Protocols Pin
AmbiguousName11-Dec-11 6:12
AmbiguousName11-Dec-11 6:12 
AnswerRe: Working On Communication Protocols Pin
Addy Tas11-Dec-11 9:08
Addy Tas11-Dec-11 9:08 
AnswerRe: Working On Communication Protocols Pin
AmbiguousName11-Dec-11 10:01
AmbiguousName11-Dec-11 10:01 
GeneralRe: Working On Communication Protocols Pin
Matty2211-Dec-11 14:17
Matty2211-Dec-11 14:17 
GeneralRe: Working On Communication Protocols Pin
jschell12-Dec-11 8:42
jschell12-Dec-11 8:42 
GeneralRe: Working On Communication Protocols Pin
Addy Tas12-Dec-11 10:46
Addy Tas12-Dec-11 10:46 
GeneralRe: Working On Communication Protocols Pin
BobJanova13-Dec-11 23:22
BobJanova13-Dec-11 23:22 
AnswerRe: Working On Communication Protocols Pin
Eddy Vluggen11-Dec-11 12:32
professionalEddy Vluggen11-Dec-11 12:32 
JokeRe: Working On Communication Protocols Pin
Peter_in_278011-Dec-11 13:33
professionalPeter_in_278011-Dec-11 13:33 
GeneralRe: Working On Communication Protocols Pin
Eddy Vluggen12-Dec-11 6:04
professionalEddy Vluggen12-Dec-11 6:04 
Questionconflict of interest, COI...in systemwatcher and stream reader... Pin
beh760610-Dec-11 23:34
beh760610-Dec-11 23:34 
AnswerRe: conflict of interest, COI...in systemwatcher and stream reader... Pin
Eddy Vluggen11-Dec-11 12:26
professionalEddy Vluggen11-Dec-11 12:26 
AnswerRe: conflict of interest, COI...in systemwatcher and stream reader... Pin
Luc Pattyn11-Dec-11 13:10
sitebuilderLuc Pattyn11-Dec-11 13:10 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.