Берет camelCaseWord или PascalCaseWord и "wordifies" это, т.е. camelCaseWord =>, Camel-регистр Word
public static string Wordify( this string camelCaseWord )
{
// if the word is all upper, just return it
if( !Regex.IsMatch( camelCaseWord, "[a-z]" ) )
return camelCaseWord;
return string.Join( " ", Regex.Split( camelCaseWord, @"(?<!^)(?=[A-Z])" ) );
}
, с которым я часто использую его в conjuction, Использует для своей выгоды
public static string Capitalize( this string word )
{
return word[0].ToString( ).ToUpper( ) + word.Substring( 1 );
}
использование В качестве примера
SomeEntityObject entity = DataAccessObject.GetSomeEntityObject( id );
List<PropertyInfo> properties = entity.GetType().GetPublicNonCollectionProperties( );
// wordify the property names to act as column headers for an html table or something
List<string> columns = properties.Select( p => p.Name.Capitalize( ).Wordify( ) ).ToList( );
Свободный использовать в codeplex проекте
Безусловно. Либо реализуйте IDynamicMetaObjectProvider
, либо унаследуйте от DynamicObject
для гораздо более простого маршрута. См. Несколько хороших примеров в документации DLR .
Вот быстрый пример DynamicObject
:
using System;
using System.Dynamic;
public class MyDynamic : DynamicObject
{
public override bool TryInvokeMember
(InvokeMemberBinder binder,
object[] args,
out object result)
{
Console.WriteLine("I would have invoked: {0}",
binder.Name);
result = "dummy";
return true;
}
public string NormalMethod()
{
Console.WriteLine("In NormalMethod");
return "normal";
}
}
class Test
{
static void Main()
{
dynamic d = new MyDynamic();
Console.WriteLine(d.HelloWorld());
Console.WriteLine(d.NormalMethod());
}
}
У меня есть более крупный пример DynamicObject
в 2-м издании C # in Depth , но я еще не реализовал IDyamicMetaObjectProvider
. Я сделаю это до выхода книги, но в выпуске раннего доступа на данный момент есть только пример DynamicObject
. Кстати, если купишь сегодня за полцены - используйте код twtr0711 . Позже я отредактирую этот ответ, чтобы удалить этот бит :)