string

Małe rzeczy

Posted on

W string jest metoda string.Concat() i samą metodą się zna od zawsze, ale jednak nie wiedziałem że może przyjmować IEnumerable.

Advertisements

Jak castować na właściwy Enum

Posted on

Napiszę jak to robię bo .NET udostępnia parę fajnych rzeczy do tego.

Głównie chodzi o parsowanie ze stringa.

FileMode fileMode = (FileMode)Enum.Parse(typeof(FileMode), stringValue, true);

Trzeci argument nazywa się ignoreCase i zazwyczaj ustawiam na true czyli wielkość liter nie muszi się zgadzać, żeby zwrócić właściwy enum.

Jeśli może się nie powieść to korzystam z analogicznej funkcji TryParse()

FileMode fileMode;
if (Enum.TryParse(stringValue, true, out fileMode))
{
    return fileMode;
}
else
{
    // ..
}

Najczęściej wrzucam do projektów coś na wzór tych rozkmin z StackOverflow:
http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum-in-c/16104#16104
http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum/79903#79903

public class EnumHelper
{
    public static TEnum GetEnumFromString<TEnum>(string value) where TEnum : struct, IComparable
    {
        if (!typeof(TEnum).IsEnum)
        {
            throw new ArgumentException(string.Format("{0} must be an enumerated type", typeof(TEnum).FullName));
        }

        return (TEnum)Enum.Parse(typeof(TEnum), value, true);
    }
}

string.Join() używa StringBuildera pod spodem

Posted on Updated on

Jak w tytule. string.Join oraz string.Concat(IEnumerable) używają pod spodem StringBuildera, więc nie trzeba go explicite używać. Poniżej kod który można złączyć za pomocą StringBuildera (jak bym kiedyś zrobił) oraz string.Concat (czyli jak teraz dla czytelności będę robił).

var names = new[] { "john", "james", "robin" }; // and many, many more

// This is how I was doing it by always default
var sb = new StringBuilder();
foreach (var name in names)
{
    sb.Append(name);
}

var result = sb.ToString();

// This is better cause of readability
var result2 = string.Concat(names);

Całkiem krótki artykuł tłumaczący też inne zagwozdki z łączeniem stringów: Concatenating Strings Efficiently

All the small things.

Posted on

Equals()

Często widzę że ktoś porównuje stringi za pomocą Equals:

// Bad code readability
cultureInfo.Name.Equals("en")

Jest to dla mnie nie czytelne. Czy jest jakiś powód dla którego to nie powinno być po prostu:

cultureInfo.Name == "en" 

To chyba ma sens kiedy np. chcesz użyć case insensitive (lub innego typu StringComparison).
Ja do porównywania stringów preferuję string.Compare() (jest też string.CompareOrdinal()). String.Compare() ma więcej możliwości niż Equals().