Sometimes the convenience of a parameter (in terms of maintenance and expressiveness), may be outweighed by its cost in performance to treat it as a parameter. For example, when page size is fixed by a configuration setting. Or a status value is matched to an enum value. Consider:
var orders = conn...
All values in Redis are ultimately stored as a RedisValue type:
//"myvalue" here is implicitly converted to a RedisValue type
//The RedisValue type is rarely seen in practice.
db.StringSet("key", "aValue");
In ADO.NET, correctly handling null is a constant source of confusion. The key point in dapper is that you don't have to; it deals with it all internally.
parameter values that are null are correctly sent as DBNull.Value
values read that are null are presented as null, or (in the case of mapping...
Open Visual Studio
In the toolbar, go to File → New Project
Select the Console Application project type
Open the file Program.cs in the Solution Explorer
Add the following code to Main():
public class Program
{
public static void Main()
{
// Prints a message to the conso...
C# allows user-defined types to overload operators by defining static member functions using the operator keyword.
The following example illustrates an implementation of the + operator.
If we have a Complex class which represents a complex number:
public struct Complex
{
public double Real ...
Extension methods were introduced in C# 3.0. Extension methods extend and add behavior to existing types without creating a new derived type, recompiling, or otherwise modifying the original type. They are especially helpful when you cannot modify the source of a type you are looking to enhance. Ex...
Verbatim strings can be combined with the new String interpolation features found in C#6.
Console.WriteLine($@"Testing \n 1 2 {5 - 2}
New line");
Output:
Testing \n 1 2 3
New line
Live Demo on .NET Fiddle
As expected from a verbatim string, the backslashes are ignored as escap...
Adding the volatile keyword to a field indicates to the compiler that the field's value may be changed by multiple separate threads. The primary purpose of the volatile keyword is to prevent compiler optimizations that assume only single-threaded access. Using volatile ensures that the value of the ...
Get Instance method and invoke it
using System;
public class Program
{
public static void Main()
{
var theString = "hello";
var method = theString
.GetType()
.GetMethod("Substring",
...
When an object graph is finalized, the order is the reverse of the construction. E.g. the super-type is finalized before the base-type as the following code demonstrates:
class TheBaseClass
{
~TheBaseClass()
{
Console.WriteLine("Base class finalized!");
}
}
...
<Store>
<Articles>
<Product/>
<Product/>
</Articles>
</Store>
public class Store
{
[XmlArray("Articles")]
public List<Product> Products {get; set; }
}
var numbers = new[] {1,2,3,4};
var averageNumber = numbers.Average();
Console.WriteLine(averageNumber);
// 2,5
This method calculates the average of enumerable of numbers.
var cities = new[] {
new {Population = 1000},
new {Population = 2000},
new {Population = 4000}
};
v...
Overloading just equality operators is not enough. Under different circumstances, all of the following can be called:
object.Equals and object.GetHashCode
IEquatable<T>.Equals (optional, allows avoiding boxing)
operator == and operator != (optional, allows using operators)
When overrid...
// single character s
char c = 's';
// character s: casted from integer value
char c = (char)115;
// unicode character: single character s
char c = '\u0073';
// unicode character: smiley face
char c = '\u263a';
// assigning a signed short to its minimum value
short s = -32768;
// assigning a signed short to its maximum value
short s = 32767;
// assigning a signed int to its minimum value
int i = -2147483648;
// assigning a signed int to its maximum value
int i = 2147483647;
// assigning a s...
// assigning an unsigned short to its minimum value
ushort s = 0;
// assigning an unsigned short to its maximum value
ushort s = 65535;
// assigning an unsigned int to its minimum value
uint i = 0;
// assigning an unsigned int to its maximum value
uint i = 4294967295;
// assigning an...