A tutti string.Empty potrebbe sembrare un'espressione costante, ma in senso C# non lo è!
Empty è definito come campo static readonly e non come const, perciò non è una "constant expression" (C# Language Specification, 14.15).
Una conseguenza di questo fatto? Il seguente banalissimo snippet non compila!
using System;
class FooAttribute: Attribute
{
public FooAttribute(string arg){}
}
class Test
{
[Foo(string.Empty)]
static void DoSomething()
{
Console.WriteLine("I did something");
}
static void Main()
{
DoSomething();
Console.Read();
}
}
Otteniamo errore di compilazione: "An attribute argument must be a constant expression, typeof expression or array creation expression" e dobbiamo sostituire string.Empty con "" oppure con null.
Strano, vero?