C# Trick

1.
ThreadPool.QueueUserWorkItem(AsyncAppend, loggingEvent);
2.
Username = string.IsNullOrEmpty(Username) ? "guest" : Username;
3.
public void Until(Func<bool> condition, Action success, Action failure)
{
   var timeIsUp = DateTime.Now.AddMilliseconds(timeout);
   while (DateTime.Now.CompareTo(timeIsUp) < 0)
  { 
     if (condition())
    {
      success();
     return;
   }
   new ManualResetEvent(false).WaitOne(interval);
  }  
   failure();
}
4.
DateTime.Now.CompareTo(DateTime.Now.AddMilliseconds(timeout)) < 0
5.
public void Until(Func<bool> condition, Action failure)
{
    Until(condition, () => { }, failure);
}
6.
public static DateTime FromUnixTimestamp(this double dateTime)
{
    var datetime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(dateTime).ToLocalTime();
    return datetime;
}

7.
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
     foreach (T item in enumeration)
    {
      action(item);
     }
}

8.
public static string AsString(this byte[] byteArray)
{
     return System.Text.Encoding.UTF8.GetString(byteArray);
}

9.
public static string TruncateString(this string value, int len)
{
    return value.Length < len ? value : value.Substring(0, len);
}

10:
c# project directories

packages
src
--bin
--Properties
--obj
--Folder
--xxxxx.cs
--xxxxxx.csproj
--packages.config
build
tools
test
--bin
--test.csproj
README.md
project.sln

11:
public static object CreateInstance(Type targetType)
{
     return targetType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, new Type[0], null).Invoke(null);
}
12:

public static object InvokeMethod(object target, string name, params object[] args)
{
     #if NETSTANDARD1_3
        return target.GetType().GetTypeInfo().GetDeclaredMethod(name).Invoke(target, args);
    #else
       return target.GetType().GetMethod(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance, null, GetTypesArray(args), null).Invoke(target, args);
    #endif
}

13:
public static void SetField(object target, string name, object val)
{
target.GetType().GetField(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance).SetValue(target, val);
}

14:
public static void SetProperty(object target, string name, object val, params object[] index)
{
target.GetType().GetProperty(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance).SetValue(target, val, index);
}

15:

// Provides a set of methods and properties that help you trace the execution of
// your code. This class cannot be inherited.
public sealed class System.Diagnostics.Trace
Trace.Listeners.Add(new TextWriterTraceListener(@"./trace.txt"));
Trace.AutoFlush = true;
Trace.WriteLine("Test Trace");

16:
System.Diagnostics.EventLog
System.Diagnostics.Debug
System.Diagnostics.Trace

17:
[Serializable]
public sealed class PropertiesDictionary : ReadOnlyPropertiesDictionary, ISerializable, IDictionary

[ThreadStatic]
private static PropertiesDictionary _dictionary;

18:
if (!(key is string))
private readonly Hashtable m_hashtable = new Hashtable();

19:
throw new NotSupportedException("This is a Read Only Dictionary and can not be modified");
throw new ArgumentException("key must be a string");

20:
[System.Security.SecurityCritical]

21:
private readonly static ThreadContextProperties xxxNotice = new ThreadContextProperties();
private readonly static ThreadContextStacks s_stacks = new ThreadContextStacks(xxxNotice);

22:
public abstract object this[string key] { get; set; }
override public object this[string key]
{
get
{
#if NETCF
PropertiesDictionary _dictionary = GetProperties(false);
#endif
if (_dictionary != null)
{
return _dictionary[key];
}
return null;
}
set
{
GetProperties(true)[key] = value;
}
}

object IDictionary.this[object key]
{
get
{
if (!(key is string))
{
throw new ArgumentException("key must be a string", "key");
}
return InnerHashtable[key];
}
set
{
if (!(key is string))
{
throw new ArgumentException("key must be a string", "key");
}
InnerHashtable[key] = value;
}
}
23:
log4net.MDC for ThreadContextVariable in Dictionary
log4net.NDC for ThreadContextStack in Stack

24:
log4net.Appender.SmtpAppender

25:
[DllImport("libc", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
private static extern void syslog(int priority, string format, string message);

26:
public static TimeSpan operator -(DateTime d1, DateTime d2);

27:
public static event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
public static bool HasListeners => LogMessagePublished != null;
DefaultLogger = logger ?? throw new ArgumentNullException(nameof(logger));
DefaultLogger = logger != null? logger:throw new ArgumentNullException(nameof(logger));

28:
if (packet is MqttDisconnectPacket disconnectPacket)
do disconnectPacket

29:
IMQTTChannel
{
Endpoint;
IsSecureConnection;
X509Certificate2 ClientCertificate;
Task ConnectAsync(CancellationToken);
Task DisconnectAsync(CancellationToken);
Task<int> ReadAsync(byte[],offset,count,CancellationToken);
Task WriteAsync(byte[] buffer,offset,count,CancellationToken);
}

30:
await Task.Factory.FromAsync(socket.BeginConnect, socket.EndConnect, _options.Server, _options.GetPort(), null).ConfigureAwait(false);

原文地址:https://www.cnblogs.com/iiiDragon/p/Trick.html