Click here to Skip to main content
15,886,919 members
Home / Discussions / C#
   

C#

 
AnswerRe: Bad design? Pin
Clifford Nelson9-Nov-12 7:57
Clifford Nelson9-Nov-12 7:57 
GeneralRe: Bad design? Pin
Sheets.d9-Nov-12 8:04
Sheets.d9-Nov-12 8:04 
GeneralRe: Bad design? Pin
Clifford Nelson9-Nov-12 22:27
Clifford Nelson9-Nov-12 22:27 
GeneralMemory Stream Pin
Kushina8-Nov-12 7:04
Kushina8-Nov-12 7:04 
GeneralRe: Memory Stream Pin
Kushina8-Nov-12 7:05
Kushina8-Nov-12 7:05 
GeneralRe: Memory Stream Pin
jschell8-Nov-12 8:43
jschell8-Nov-12 8:43 
GeneralRe: Memory Stream Pin
Kushina9-Nov-12 9:58
Kushina9-Nov-12 9:58 
QuestionTotal hack - but is it OK? Pin
harold aptroot8-Nov-12 4:58
harold aptroot8-Nov-12 4:58 
Say we have a struct A that looks like this:
C#
struct A
{
    public string a0;
    public string a1;
    public string a2;
    public string a3;


    public unsafe string this[int index]
    {
        get { return *(&a0 + index); }
    }
}

Ok so you can't do that, it would only work for unmanaged types. Fixed size array then? Nope, also only works for unmanaged types.

So then I had a terrible idea:
C#
struct A
{
    public string a0;
    public string a1;
    public string a2;
    public string a3;


    public unsafe string this[int index]
    {
        get { return get(ref this, index); }
    }

    delegate string Get(ref A obj, int index);
    static Get get;

    static A()
    {
        DynamicMethod dm = new DynamicMethod("getat", typeof(string), new Type[] { typeof(A).MakeByRefType(), typeof(int) }, typeof(A));
        ILGenerator gen = dm.GetILGenerator();
        gen.Emit(OpCodes.Ldarg_0);
        gen.Emit(OpCodes.Ldflda, typeof(A).GetField("a0"));
        gen.Emit(OpCodes.Sizeof, typeof(IntPtr));
        gen.Emit(OpCodes.Ldarg_1);
        gen.Emit(OpCodes.Mul);
        gen.Emit(OpCodes.Conv_I);
        gen.Emit(OpCodes.Add);
        gen.Emit(OpCodes.Ldind_Ref);
        gen.Emit(OpCodes.Ret);
        get = (Get)dm.CreateDelegate(typeof(Get));
    }
}

And guess what, it works (as far as I tested).

This is a total hack, obviously. But is it OK? Assuming it isn't given bad indexes, can it fail somehow?

I'm not really too interested in "how to do this the right way" (unless you've got something that isn't "just use an array" or "use a switch, it's only 4 items" (that's just for the example)), just in how terrible this way really is.

modified 8-Nov-12 12:15pm.

AnswerRe: Total hack - but is it OK? Pin
Dave Kreskowiak8-Nov-12 6:37
mveDave Kreskowiak8-Nov-12 6:37 
AnswerRe: Total hack - but is it OK? Pin
SledgeHammer018-Nov-12 6:43
SledgeHammer018-Nov-12 6:43 
GeneralRe: Total hack - but is it OK? Pin
BobJanova8-Nov-12 23:18
BobJanova8-Nov-12 23:18 
AnswerRe: Total hack - but is it OK? Pin
Eddy Vluggen8-Nov-12 8:47
professionalEddy Vluggen8-Nov-12 8:47 
GeneralRe: Total hack - but is it OK? Pin
harold aptroot8-Nov-12 9:05
harold aptroot8-Nov-12 9:05 
GeneralRe: Total hack - but is it OK? Pin
Eddy Vluggen8-Nov-12 9:24
professionalEddy Vluggen8-Nov-12 9:24 
GeneralRe: Total hack - but is it OK? Pin
harold aptroot8-Nov-12 9:43
harold aptroot8-Nov-12 9:43 
GeneralRe: Total hack - but is it OK? Pin
Eddy Vluggen8-Nov-12 10:13
professionalEddy Vluggen8-Nov-12 10:13 
AnswerDepends on your goal Pin
Ennis Ray Lynch, Jr.9-Nov-12 7:26
Ennis Ray Lynch, Jr.9-Nov-12 7:26 
QuestionHow to get outlook mails using add-ins Pin
Sanjeev99187-Nov-12 23:10
Sanjeev99187-Nov-12 23:10 
AnswerRe: How to get outlook mails using add-ins Pin
Dave Kreskowiak8-Nov-12 1:36
mveDave Kreskowiak8-Nov-12 1:36 
GeneralRe: How to get outlook mails using add-ins Pin
OriginalGriff8-Nov-12 4:15
mveOriginalGriff8-Nov-12 4:15 
GeneralRe: How to get outlook mails using add-ins Pin
Sanjeev99188-Nov-12 23:31
Sanjeev99188-Nov-12 23:31 
GeneralRe: How to get outlook mails using add-ins Pin
Dave Kreskowiak9-Nov-12 1:49
mveDave Kreskowiak9-Nov-12 1:49 
QuestionConverting a stream of html to xml and reading the xml into a xmldocumet in c# Pin
Steve Holdorf7-Nov-12 23:05
Steve Holdorf7-Nov-12 23:05 
AnswerRe: Converting a stream of html to xml and reading the xml into a xmldocumet in c# Pin
Deflinek7-Nov-12 23:20
Deflinek7-Nov-12 23:20 
GeneralRe: Converting a stream of html to xml and reading the xml into a xmldocumet in c# Pin
Steve Holdorf8-Nov-12 2:40
Steve Holdorf8-Nov-12 2:40 

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.