MICROSOFT VISUAL STUDIO
Microsoft Visual Studio: tips su C# - C Sharp

A Quick Guida for C# (C Sharp) Programmers

In questa piccolissima guida vedremo utili consigli per programmatori C#: uso dei log con Log4NET, uso di JSON, qualche utile funzione per chi ha a che fare con i file, qualche utile conversione, conversione di una stringa in valore booleano.

 

 

LOGGING

Ipotesi: abbiamo un programma C# e vogliamo loggare determinate informazioni. 

Quale libreria conviene usare? In questo ambiente la più usata è Log4NET (priprio come in Java abbiamo la Log4J).

Vediamo qualche piccolo trucco/consiglio per usare al meglio le funzionalità di logging di Log4NET.

Come inserire il log nella nostra classe? Il miglior metodo è:

 

private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

 

Così facendo si dichiara nella nostra classe la variabile statica da usare per loggare.

Notare come con il codice System.Reflection.MethodBase.GetCurrentMethod().DeclaringType si prende il nome della classe in automatico (utilissima info da inserire nel file di log). Questo ha l'indubbio vantaggio di riutilizzare il codice al volo senza dover cambiare nulla.

Come fare il log nei nostri metodi?

Io uso queste due istruzioni all'inizio e alla fine dei metodi più importanti:

 

Logger.Info(MethodBase.GetCurrentMethod().DeclaringType.ToString() + " - " + MethodBase.GetCurrentMethod().Name + " - Method Begin");

...

Logger.Info(MethodBase.GetCurrentMethod().DeclaringType.ToString() + " - " + MethodBase.GetCurrentMethod().Name + " - Method End");

 

Anche qui, la motivazione di questo codice è quella di prendere in automatico il nome della classe con il suo namespace ed il nome del metodo.

 

 

JSON

Ipotesi: abbiamo un programma C# e vogliamo gestire i msg JSON.

La libreria più usata è quella della Newtonsoft che può tranquillamente essere installata nella nostra solution tramite NuGet.

Come creare un msg JSON? Ecco i semplici passi

 

            //Stringa che conterrà il nostro msg JSON

            string jsonMsg = string.Empty;
                             
            JObject msgJson = JObject.FromObject(new { mioTag = "mioValore" });

            //La seguente istruzione ci dà un msg JSON sotto forma di stringa e senza formattazione

            jsonMsg = JsonConvert.SerializeObject(msgJson, Newtonsoft.Json.Formatting.None);           

            StringContent jsonContent = new StringContent(jsonMsg, Encoding.UTF8, "application/json");

 

Vediamo ora come convertire una stringa XML in msg JSON:

            XmlDocument doc = new XmlDocument();
            doc.XmlResolver = null;
            doc.LoadXml(myStringXML);
            string jsonMsg = JsonConvert.SerializeXmlNode(doc);

Sempre per l'esempio appena visto possiamo anche fare:

 

string xmljson = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);

 

Ovvero gli diciamo di non usare alcuna formattazione e di non inserire la root del nostro XML.

Come ciclare su un JArray (JSON Array)?

                JArray jarr = (JArray)response.Response["fields"];
                foreach (JObject contentTmp in jarr.Children<JObject>())
                {
                    foreach (JProperty prop in contentTmp.Properties())
                    {
                        string tempValue = prop.Value.ToString(); 
                        //here more code in order to save in a database
                    }
                }

 

FILE

Da immagine a ByteArray e poi in string a base64

Vediamo come avere una stringa Base64 a partire da una immagine:

byte[] imageArray = System.IO.File.ReadAllBytes(@"path della immagine");
string base64ImageRepresentation = Convert.ToBase64String(imageArray);

 

Da stringa a File

Vediamo come scrivere una stringa in un file:

using (StreamWriter outputFile = new StreamWriter(@"path del file txt"))
{
     outputFile.WriteLine(base64ImageRepresentation);
}

 

Da stringa base64 a byte[]

byte[] image =  Convert.FromBase64String(base64ImageRepresentation);

 

Da byte[] a file con sovrascrittura

Vediamo come a partire da un array di byte possiamo scrivere il file su file system tenendo conto che il file possa esserci già e quindi va sovrascritto (in questo caso se c'è prima lo cancelliamo):

 

byte[] myByte = ...;

if (File.Exists(@"C:\myPath\myFile.png")) {
    File.Delete(@"C:\myPath\myFile.png");
}
System.IO.FileStream fileStream = new System.IO.FileStream(@"C:\myPath\myFile.png", System.IO.FileMode.Create, System.IO.FileAccess.Write);

fileStream.Write(myByte, 0, myByte.Length);
fileStream.Close();

 

CONVERSIONI

Da string a Double

Il nostro scopo è convertire una string in un double tenendo conto che il numero reale possa avere il punto o la virgola come separtore:

 

double y;

try
{

    y = double.Parse(myStringWithDouble, CultureInfo.InvariantCulture);
} catch (Exception) {

    y = 0.0;

}

 

Se qualcosa va storto si mette come valore di default 0.0.

 

Boolean.TryParse()

Vediamo come gestire al meglio la conversione di una stringa in booleano.

Il miglior codice da usare è il seguente:

 

bool mioValoreBool = false;

string valoreStrDaconvertire = .....;
if (!Boolean.TryParse(valoreStrDaconvertire, out mioValoreBool))            
{
   log.Info("Conversione in bool non riuscita.");
   mioValoreBool = false;
}

 

La variabile mioValoreBool conterrà la conversione in booleano del valore in stringa valoreStrDaconvertire.

Se la conversione non riesce la funzione ritorna False e questo valore deve essere gestito esplicitamente altrimenti in fase di analisi statica del codice si ottiene il warning seguente:

 

CA1806    Do not ignore method results

 

 

Buon lavoro!

Il nostro sito utilizza i cookie

Usando il sito accetti implicitamente il loro uso. Per saperne di piu'

Approvo