SL + Sockets

http://weblogs.asp.net/mschwarz/archive/2008/03/07/silverlight-2-and-sockets.aspx

http://weblogs.asp.net/mschwarz/archive/2008/03/10/silverlight-socket-comments.aspx

I didn't know SilverLight 2 supported System.Net.Sockets.Socket

This is another tick crossed off my checklist.

There are heaps of restrictions

  • no cross domain
  • allowed port range is only 4502 ~ 4532 (so only 30 ports)

Still... (dream of the possibilities)

Ad-hoc data structuring with anonymous types

I've been experimenting with the anonymous types we have in C# 3.0, here's my latest creation:

var actions = new[]
{
new { Name = ActionSave, Type = KnownActionType.Save },
new { Name = ActionCopy, Type = KnownActionType.Copy },
new { Name = ActionNew, Type = KnownActionType.New },
// snipped another 10 actions...
};
foreach (var action in actions)
{
Actions.Add(new Action(action.Name, action.Type));
}

C# happily compiled this for me, to my surprise.  And it works just as I expected it to.


image


Even intellisense picked it up properly.  See, strongly typed goodness.


The most amazing part I wasn't expecting is the C# compiler knowing that all the array items are the same anonymous type.  So it must have worked that bit out somewhere.


---


Prior to the amazing var variable, you would to do this with nasty looking nested object[] setup.  Like so:


(warning, untested code)

object actions = new object[]
{
new object[] { ActionSave, KnownActionType.Save },
new object[] { ActionCopy, KnownActionType.Copy },
new object[] { ActionNew, KnownActionType.New },
// snipped another 10 actions...
};
foreach (object action in actions)
{
// reall awful looking line next
Actions.Add(new Action((string)action[0], (KnownActionType)action[1]));
}



There are heaps of things wrong with this old way:



  • No type safety - do your own casting

  • No array-size safety - index 0 or 1 may not exist

  • Boxing with KnownActionType

 


Yes.  I think I'm going to do nested anonymous types next.


jliu

IE, appendChild, setAttribute, CSS Class

I want to add a star to the end of a label for mandatory fields in the DOM.

.mandatoryIndicator { font-color: red; }

 

var star = document.createElement("span");
star.setAttribute("class","mandatoryIndicator");
star.innerHTML = " *";
label.appendChild( star );

The above code doesn't work in IE, the star is added, but it remains the default text colour.

I did a bit of hunting around and found out the problem is actually with setAttribute.  It doesn't work with half a dozen properties on the element.

The fix is actually quite easy, use this:

var star = document.createElement("span");
star.className = "mandatoryIndicator";
star.innerHTML = " *";
label.appendChild( star );

Anonymous Type of an existing type

I find the .NET anonymous type a bit weak in terms of a few more features:

  1. Can't inherit/implement an existing type
    var x = new : IMyInterface {
       Number = 1,
       Name = "Hi",
    };
  2. Can't add methods
    var x = new {
       Number = 1,
       Name = "Hi",
       Action = delegate(object o){ return true; },
    }

I guess anonymous types are purely for quick throw-away data constructs.  I might just as well write a class directly with all the stuff I wanted.