Хотя я думаю, что решение на основе регулярных выражений - это, вероятно, тот путь, по которому я бы пошел, я бы соблазнился заключить это в тип.
public class AlphaNumericString
{
public AlphaNumericString(string s)
{
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(s))
{
value = s;
}
else
{
throw new ArgumentException("Only alphanumeric characters may be used");
}
}
private string value;
static public implicit operator string(AlphaNumericString s)
{
return s.value;
}
}
Теперь, когда вам нужна проверенная строка, вы можете иметь сигнатуру метода, требующую AlphaNumericString, и знать, что если вы ее получите, она действительна (кроме нулевых значений). Если кто-то попытается передать неподтвержденную строку, он сгенерирует ошибку компилятора.
Если хотите, вы можете сделать все возможное и реализовать все операторы равенства или явное приведение к AlphaNumericString из простой старой строки.