Question:
Is there a comprehensive overview of all syntax possibilities in c# ?Answer:
Yes. A Microsoft guy (Kirill Osenkov) tried it in this post C# Syntax All-In-One file.
I think it's nice as a reminder - if you understand already most of the concepts :)
Here is copy
#error Error message
#warning Warning message
#pragma warning disable 414, 3021
#pragma warning restore 3021
#line 6
#line 2 "test.cs"
#line default
#line hidden
#define foo
#if foo
#else
#endif
#undef foo
extern alias Foo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using M = System.Math;
#if DEBUG || TRACE
using System.Diagnostics;
#elif SILVERLIGHT
using System.Diagnostics;
#else
using System.Diagnostics;
#endif
#region Region
#region more
using ConsoleApplication2.Test;
#endregion
using X = int1;
using Y = ABC.X<int>;
#endregion
[assembly: System.Copyright(@"(C)""
2009")]
[module: System.Copyright("\n\t\u0123(C) \"2009" + "\u0123")]
class TopLevelType : IDisposable
{
void IDisposable.Dispose() { }
}
namespace My
{
using A.B;
interface CoContra<out T, in K> { }
delegate void CoContra2<[System.Obsolete()] out T, in K> () where T : struct;
public unsafe partial class A : C, I
{
[DllImport("kernel32", SetLastError = true)]
static extern bool CreateDirectory(string name, SecurityAttribute sa);
private const int global = int.MinValue - 1;
[method: Obsolete]
public A([param: Obsolete] int foo) :
base(1)
{
L:
{
int i = sizeof(int);
++i;
}
#if DEBUG
Console.WriteLine(export.iefSupplied.command);
#endif
const int? local = int.MaxValue;
const Guid? local0 = new Guid(r.ToString());
var ?????? = local;
var ??? = local;
var local3 = 0, local4 = 1;
local3 = local4 = 1;
var local5 = null as Action ?? null;
var local6 = local5 is Action;
var u = 1u;
var U = 1U;
long hex = 0xBADC0DE, Hex = 0XDEADBEEF, l = -1L, L = 1L, l2 = 2l;
ulong ul = 1ul, Ul = 1Ul, uL = 1uL, UL = 1UL,
lu = 1lu, Lu = 1Lu, lU = 1lU, LU = 1LU;
int minInt32Value = -2147483648;
int minInt64Value = -9223372036854775808L;
bool @bool;
byte @byte;
char @char = 'c', \u0066 = '\u0066', hexchar = '\x0130', hexchar2 = (char)0xBAD;
string \U00000065 = "\U00000065";
decimal @decimal = 1.44M;
@decimal = 1.2m;
dynamic @dynamic;
double @double = M.PI;
@double = 1d;
@double = 1D;
@double = -1.2e3;
float @float = 1.2f;
@float = 1.44F;
int @int = local ?? -1;
long @long;
object @object;
sbyte @sbyte;
short @short;
string @string = @"""/*";
uint @uint;
ulong @ulong;
ushort @ushort;
dynamic dynamic = local5;
var add = 0;
var ascending = 0;
var descending = 0;
var from = 0;
var get = 0;
var global = 0;
var group = 0;
var into = 0;
var join = 0;
var let = 0;
var orderby = 0;
var partial = 0;
var remove = 0;
var select = 0;
var set = 0;
var value = 0;
var var = 0;
var where = 0;
var yield = 0;
where = yield = 0;
if (i > 0)
{
return;
}
else if (i == 0)
{
throw new Exception();
}
var o1 = new MyObject();
var o2 = new MyObject(var);
var o3 = new MyObject { A = i };
var o4 = new MyObject(@dynamic)
{
A = 0,
B = 0,
C = 0
};
var o5 = new { A = 0 };
var dictionaryInitializer = new Dictionary<int, string>
{
{1, ""},
{2, "a"}
};
float[] a = new float[]
{
0f,
1.1f
};
int[, ,] cube = { { { 111, 112, }, { 121, 122 } }, { { 211, 212 }, { 221, 222 } } };
int[][] jagged = { { 111 }, { 121, 122 } };
int[][,] arr = new int[5][,]; // as opposed to new int[][5,5]
arr[0] = new int[5,5]; // as opposed to arr[0,0] = new int[5];
arr[0][0,0] = 47;
int[] arrayTypeInference = new[] { 0, 1, };
switch (3) { }
switch (i)
{
case 0:
case 1:
{
goto case 2;
}
case 2 + 3:
{
goto default;
break;
}
default:
{
return;
}
}
while (i < 10)
{
++i;
if (true) continue;
break;
}
do
{
++i;
if (true) continue;
break;
}
while (i < 10);
for (int j = 0; j < 100; ++j)
{
for(;;)
{
for (int i = 0, j = 0; i < length; i++, j++) { }
if (true) continue;
break;
}
}
label:
goto label;
label2: ;
foreach (var i in Items())
{
if (i == 7)
return;
else
continue;
}
checked
{
checked(++i);
}
unchecked
{
unchecked(++i);
}
lock (sync)
process();
using (var v = BeginScope())
using (A a = new A())
using (A a = new A(), b = new A())
using (BeginScope())
return;
yield return this.items[3];
yield break;
fixed (int* p = stackalloc int[100], q = &y)
{
*intref = 1;
}
fixed (int* p = stackalloc int[100])
{
*intref = 1;
}
unsafe
{
int* p = null;
}
try
{
throw null;
}
catch (System.AccessViolationException av)
{
throw av;
}
catch (Exception)
{
throw;
}
finally
{
try { } catch { }
}
var anonymous =
{
A = 1,
B = 2,
C = 3,
};
var query = from c in customers
let d = c
where d != null
join c1 in customers on c1.GetHashCode() equals c.GetHashCode()
join c1 in customers on c1.GetHashCode() equals c.GetHashCode() into e
group c by c.Country
into g
orderby g.Count() ascending
orderby g.Key descending
select new { Country = g.Key, CustCount = g.Count() };
query = from c in customers
select c into d
select d;
}
~A()
{
}
private readonly int f1;
[Obsolete]
[NonExisting]
[Foo::NonExisting(var, 5)]
[CLSCompliant(false)]
[Obsolete, System.NonSerialized, NonSerialized, CLSCompliant(true || false & true)]
private volatile int f2;
[return: Obsolete]
[method: Obsolete]
public void Handler(object value)
{
}
public int m<T>(T t)
where T : class, new()
{
base.m(t);
return 1;
}
public string P
{
get
{
return "A";
}
set;
}
public abstract string P
{
get;
}
public abstract int this[int index]
{
protected internal get;
internal protected set;
}
[method: Obsolete]
[field: Obsolete]
[event: Obsolete]
public readonly event Event E;
[event: Test]
public event Action E1
{
[Obsolete]
add { value = value; }
[Obsolete]
[return: Obsolete]
remove { E += Handler; E -= Handler; }
}
public static A operator +(A first, A second)
{
Delegate handler = new Delegate(Handler);
return first.Add(second);
}
[method: Obsolete]
[return: Obsolete]
public static bool operator true(A a)
{
return true;
}
public static bool operator false(A a)
{
return false;
}
class C
{
}
}
public struct S : I
{
public S()
{
}
private int f1;
[Obsolete]
private volatile int f2;
public abstract int m<T>(T t)
where T : struct
{
return 1;
}
public string P
{
get
{
int value = 0;
return "A";
}
set;
}
public abstract string P
{
get;
}
public abstract int this[int index]
{
get;
internal protected set;
}
public event Event E;
public static A operator +(A first, A second)
{
return first.Add(second);
}
fixed int field[10];
class C
{
}
}
public interface I
{
void A(int value);
string Value
{
get;
set;
}
}
[type: Flags]
public enum E
{
A,
B = A,
C = 2 + A,
#if DEBUG
D,
#endif
}
public delegate void Delegate(object P);
namespace Test
{
using System;
using System.Collections;
public class ??????
{
public static IEnumerable Power(int number, int exponent)
{
?????? ?????? = new ??????();
??????.Main();
int counter = 0;
int ??? = 0;
while (++counter++ < --exponent--)
{
result = result * number + +number+++++number;
yield return result;
}
}
static void Main()
{
foreach (int i in Power(2, 8))
{
Console.Write("{0} ", i);
}
}
}
}
}
namespace ConsoleApplication1
{
namespace RecursiveGenericBaseType
{
class A<T> : B<A<T>, A<T>> where T : A<T>
{
protected virtual A<T> M() { }
protected abstract B<A<T>, A<T>> N() { }
static B<A<T>, A<T>> O() { }
}
sealed class B<T1, T2> : A<B<T1, T2>>
{
protected override A<T> M() { }
protected sealed override B<A<T>, A<T>> N() { }
new static A<T> O() { }
}
}
namespace Boo
{
public class Bar<T> where T : IComparable
{
public T f;
public class Foo<U> : IEnumerable<T>
{
public void Method<K, V>(K k, T t, U u)
where K : IList<V>, IList<T>, IList<U>
where V : IList<K>
{
A<int> a;
M(A<B, C>(5));
}
};
};
};
class Test
{
void Bar3()
{
var x = new Boo.Bar<int>.Foo<object>();
x.Method<string, string>(" ", 5, new object());
var q = from i in new int[] { 1, 2, 3, 4 }
where i > 5
select i;
}
public static implicit operator Test(string s)
{
return new ConsoleApplication1.Test();
}
public static explicit operator Test(string s)
{
return new Test();
}
public int foo = 5;
void Bar2()
{
foo = 6;
this.Foo = 5.GetType(); Test t = "sss";
}
public event EventHandler MyEvent = delegate { };
void Blah()
{
int i = 5;
int? j = 6;
Expression<Func<int>> e = () => i;
Expression<Func<bool, Action>> e2 = b => () => { return; };
Func<bool, bool> f = delegate (bool a)
{
return !a;
};
Func<int, int, int> f2 = (a, b) => 0;
f2 = (int a, int b) => 1;
Action a = Blah;
f2 = () => {};
f2 = () => {;};
}
delegate Recursive Recursive(Recursive r);
delegate Recursive Recursive<A,R>(Recursive<A,R> r);
public Type Foo
{
[Obsolete("Name", error = false)]
get
{
var result = typeof(IEnumerable<int>);
var t = typeof(int?) == typeof(Nullable<int>);
t = typeof(IEnumerable<int?[][][]>);
return typeof(IEnumerable<>);
}
set
{
var t = typeof(System.Int32);
t.ToString();
t = value;
}
}
public void Constants()
{
int i = 1 + 2 + 3 + 5;
global::System.String s = "a" + (System.String)"a" + "a" + "a" + "a" + "A";
}
public void ConstructedType()
{
List<int> i = null;
int c = i.Count;
}
}
}
namespace Comments.XmlComments.UndocumentedKeywords
{
/// <summary>
/// Whatever
/// </summary>
/// <!-- c -->
/// <![CDATA[c]]> //
/// <c></c> /* */
/// <code></code>
/// <example></example>
/// <exception cref="bla"></exception>
/// <include file='' path='[@name=""]'/>
/// <permission cref=" "></permission>
/// <remarks></remarks>
/// <see cref=""/>
/// <seealso cref=" "/>
/// <value></value>
/// <typeparam name="T"></typeparam>
class /*///*/C<T>
{
void M<U>(T t, U u)
{
// comment
/* *** / */
/* //
*/
/*s*///comment
// /***/
/*s*/int /*s*/intValue = 0;
intValue = intValue /*s*/+ 1;
string strValue = /*s*/"hello";
/*s*/MyClass c = new MyClass();
string verbatimStr = /*s*/@"\\\\";
}
}
//General Test F. Type a very long class name, verify colorization happens correctly only upto the correct size (118324)
class TestClassXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/*Scen8*/{ }
class TestClassXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX22/*Scen9*/{ }
class yield
{
void Foo<U>(__arglist)
{
C<U> c = null;
c.M<int>(5, default(U));
TypedReference tr = __makeref(c);
Type t = __reftype(tr);
int j = __refvalue(tr, int);
Params(a: t, b: t);
Params(ref c, out c);
}
void Params(ref dynamic a, out dynamic b, params dynamic[] c) {}
void Params(out dynamic a = 2, ref dynamic c = default(dynamic), params dynamic[][] c) {}
public override string ToString() { return base.ToString(); }
public partial void OnError();
public partial void method()
{
int?[] a = new int?[5];/*[] bug*/ // YES []
int[] var = { 1, 2, 3, 4, 5 };/*,;*/
int i = a[i];/*[]*/
Foo<T> f = new Foo<int>();/*<> ()*/
f.method();/*().*/
i = i + i - i * i / i % i & i | i ^ i;/*+ - * / % & | ^*/
bool b = true & false | true ^ false;/*& | ^*/
b = !b;/*!*/
i = ~i;/*~i*/
b = i < i && i > i;/*< && >*/
int? ii = 5;/*? bug*/ // NO ?
int f = true ? 1 : 0;/*? :*/ // YES :
i++;/*++*/
i--;/*--*/
b = true && false || true;/*&& ||*/
i << 5;/*<<*/
i >> 5;/*>>*/
b = i == i && i != i && i <= i && i >= i;/*= == && != <= >=*/
i += 5.0;/*+=*/
i -= i;/*-=*/
i *= i;/**=*/
i /= i;/*/=*/
i %= i;/*%=*/
i &= i;/*&=*/
i |= i;/*|=*/
i ^= i;/*^=*/
i <<= i;/*<<=*/
i >>= i;/*>>=*/
object s = x => x + 1;/*=>*/
Point point;
unsafe
{
Point* p = &point;/** &*/
p->x = 10;/*->*/
}
IO::BinaryReader br = null;
}
struct Point { public int X; public int Y; public void ThisAccess() { this = this; } }
}
}
No comments:
Post a Comment