If you need to split strings, remember to use StringsplitOptions Enumeration.
string myString = "one,two, , ,five";
string[] myArray = myString.Split(charSeparators,
StringSplitOptions.RemoveEmptyEntries);
In myArray we have this:
- one
- two
- five
string myString = "one,two, , ,five";
string[] myArray = myString.Split(charSeparators, StringSplitOptions.None);
In myArray we have this:
- one
- two
-
-
- five
Mads Kristensen has created a C# class for using Google Closure Compiler.
This class is very easy but very useful:
public string Compress(string file)
{
string source = File.ReadAllText(file);
XmlDocument xml = CallApi(source);
return xml.SelectSingleNode("//compiledCode").InnerText;
}
private static XmlDocument CallApi(string source)
{
using (WebClient client = new WebClient())
{
client.Headers.Add("content-type", "application/x-www-form-urlencoded");
string data = string.Format(PostData, HttpUtility.UrlEncode(source));
string result = client.UploadString(ApiEndpoint, data);
XmlDocument doc = new XmlDocument();
doc.LoadXml(result);
return doc;
}
}
For information and for download the complite code, read Mads Kristensen’ s post.
Abount Closure Compiler project.
int[] myIntArray = {0, 1, 2, 3};
ArrayList myArrayList = new ArrayList();
myArrayList.AddRange(myIntArra);
Piccolissimo snipp per cancellare le righe presenti in una DataGridView
for (int i = this.dataGrid.Rows.Count; i > 0; i--)
{
this.dataGrid.Rows.Remove(this.dataGrid.Rows[0]);
}
Qualche giorno fa mi sono dilettato nella creazione si una custom section in un file di configurazione. Dopo un pò di ricerche ho scritto quanto segue. Ogni suggerimento è graditissimo…
using System;
using System.Collections.Generic;
using System.Configuration;
Prosegui la lettura…
A futura memoria:
string[] stringArray = { "1", "2", "3"};
int[] intArray = Array.ConvertAll<string, int>(stringArray, delegate(string s) { return int.Parse(s); });
Eccovi una chiara spiegazione di come implementare il Singleton Pattern in C# : http://www.yoda.arachsys.com/csharp/singleton.html
C’è chi, invece, consiglia di starci lontano: http://blogs.msdn.com/scottdensmore/archive/2004/05/25/140827.aspx
Ieri ho scritto un promemoria per ricordami di come attivare CLR in SQL Server 2005, oggi vi posto il link di un iteressante articolo su come scrivere CLR Stored Procedures in C#.
Ecco un articolo veramente ben scritto che illustra i passi necessari per creare il project su Visual Studio corredato da codice di semplice comprensione:
Writing CLR Stored Procedures in C# – Introduction to C# (Part 1)
Writing CLR Stored Procedures in C# – Returning Data (Part 2)
Stamattina ho trovato sul blog di Fabrizio, un interessante articolo per crere AddIn per Live Messenger. Mi permetto di fare alcune precisazioni che, forse per brevità, Fabrizio ha omesso.
Dopo aver creato un Project “Class Library”, è necessario includere nelle Reference l’ assembly MessengerClient che trovate nella directory C:\Programmi\Windows Live\Messenger\. A questo punto possiamo inserire nelle direttive la using Microsoft.Messenger.
Prima di compilare la nostra applicazione, è necessario che il nome dell’ assembly e il nome del combinato namespace-classe, devono coincidere:
se il mio assembli si chiama ADRweb.AutoResponderBot.dll, il namespace di primo livello si dovrà chiamare ADRweb e la classe si dovrà chiamare AutoResponderBot.
A questo punto siamo pronti per compilare ed installare con la procedura illustrata da fabrizio.
Vi posto il codice del primo primo AddIn che sicuramente non sarà l’ ultimo…
using System;
using Microsoft.Messenger;
namespace ADRweb
{
public class AutoResponderBot : IMessengerAddIn
{
private MessengerClient _messenger;
#region IMessengerAddIn Members
public void Initialize(MessengerClient messenger)
{
_messenger = messenger;
_messenger.AddInProperties.Creator = "Zaragon";
_messenger.AddInProperties.Description = "Hello Bot AddIn";
_messenger.AddInProperties.FriendlyName = "AutoResponderBot";
_messenger.AddInProperties.Url = new Uri("http://blog.adrweb.net");
_messenger.IncomingTextMessage += new EventHandler <IncomingTextMessageEventArgs>(MsnIncomingTextMessage);
}
//IncomingTextMessage si verifica quando un contatto ci invia un messaggio
private void MsnIncomingTextMessage(object sender, IncomingTextMessageEventArgs e)
{
//se il mio stato è impostato su "Occupato"
if ((_messenger.LocalUser.Status == UserStatus.Busy))
{
_messenger.SendTextMessage("Questo è un messaggio automatico. " +
"Non posso risponderti perchè sono occupato. " +
"Ti contatto appena ho finito.", e.UserFrom);
}
//se il mio stato è impostato su "Al telefono"
if (_messenger.LocalUser.Status == UserStatus.OnThePhone)
{
_messenger.SendTextMessage("Questo è un messaggio automatico. " +
"Non posso risponderti perchè sono al telefono. " +
"Ti contatto appena ho finito.", e.UserFrom);
}
}
#endregion
}
}
Ecco una simpatica funzione ricorsiva implementata oggi per leggere ricorsivamente un XML.
/// <summary>
/// Processa sottonodi ricorsivamente
/// </summary>
/// <param name="node">nodo padre</param>
private void ProcessaSottoNodi(XmlNode node)
{
if (node.HasChildNodes)
{
foreach (XmlNode cNode in node.ChildNodes)
{
foreach (XmlAttribute attr in cNode.Attributes)
Console.WriteLine("{0}", attr.Name + " = " + attr.InnerText);
Console.WriteLine("-------------------------------");
ProcessaSottoNodi(cNode);
}
}
}
E questo è un XML di esempio col quale potete testare il metodo:
<node level="1" desc="desc 1" query="" dbQuery="">
<node desc="desc 2" query="query 2" dbQuery="aaa">
<node desc="desc 3" query="query 3" dbQuery="aaa">
<node desc="desc 4" query="query 4" dbQuery="aaa">
<node desc="desc 5" query="query 5" dbQuery="aaa">
<node desc="desc 6" query="query 6" dbQuery="aaa">
<node desc="desc 7" query="query 7" dbQuery="aaa">
<node desc="desc 8" query="query 8" dbQuery="aaa">
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>