GateKiller, что случилось с моим обходным решением? Вы могли переписать свою функцию тривиально для использования его (я брал на себя смелость для улучшения функции на лету):
static string sMessages(Expression<Func<List<string>>> aMessages) {
var messages = aMessages.Compile()();
if (messages.Count == 0) {
return "";
}
StringBuilder ret = new StringBuilder();
string sType = ((MemberExpression)aMessages.Body).Member.Name;
ret.AppendFormat("<p class=\"{0}\">", sType);
foreach (string msg in messages) {
ret.Append(msg);
ret.Append("<br />");
}
ret.Append("</p>");
return ret.ToString();
}
Вызов это как это:
var errors = new List<string>() { "Hi", "foo" };
var ret = sMessages(() => errors);
Взгляните на функции ввода-вывода в криптобиблиотеке OpenSSL , в частности на функции PEM
RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x,
pem_password_cb *cb, void *u);
RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x,
pem_password_cb *cb, void *u);