Newbe.Claptrap 0.2.10がリリースされ、さらに多くのベルとホイッスルがリリースされました。
コンテンツを更新する
簡略化された中国語でプロジェクトの説明を追加しました。
https://gitee.com/yks/Newbe.ObjectVisitor/blob/main/README_zh_Hans.md
これで、コンテキストを介して属性の値を変更できます。
//✔️ from 0.2
// 可以修改属性
o.V().ForEach((context) => ModifyData(context)).Run();
public static void ModifyData(IObjectVisitorContext<Yueluo,string> context)
{
context.Value = context.Value.SubString(0,1);
}
現在、複数のForEach操作がサポートされています。
// ✔️ from 0.2
// 多重 foreach
o.V().ForEach((context)=>{}).ForEach((context)=>{}).Run();
現在、より派手な属性条件の判断のサポート:
//✔️ from 0.2
// 遍历指定类型的属性
o.V().ForEach<Yueluo, string>((context) => {});
// 和上一条完全一样
o.V().ForEach<Yueluo, string>((context) => {}, x => x.PropertyType == typeof(string));
// 遍历被标记了 RequiredAttribute 的 string 属性
o.V().ForEach<Yueluo, string>((context) => {}, x => x.PropertyType == typeof(string) && x.GetCustomAttribute<RequiredAttribute>());
// 遍历“是”或者实现了 IEnumerable<int> 接口的属性, 例如 List<int>, int[], IEnumerable<int>, HashSet<int> 等等。
o.V().ForEach<Yueluo, IEnumerable<int>>((context) => {}, x => x.IsOrImplOf<IEnumerable<int>>());
// 指定属性类型,并包含一个扩展的参数
o.V().WithExtendObject<Yueluo, StringBuilder>().ForEach<Yueluo, StringBuilder, string>((context) => {});
ベンチマーク
2つのベンチマークを更新しました。
- FormatStringの実装が最適化され、QuickStyleと独自の手書きのObjectVisitorの間にほとんど違いはありません。
- ObjectVisitorを使用して属性値を変更するコストは約1〜5マイクロ秒(1000分の1ミリ秒)です。
詳細なデータはプロジェクトのホームページで見ることができます。ここではチャートの説明のみを示しています。
論文
いくつかの関連する体験記事が追加されました:
サンプルシーン
ライブラリを使用して関数を実装できるシナリオとプラクティスをいくつか追加しました。
- データベースリンク文字列をデータモデルに変換するか、データモデルをリンク文字列としてフォーマットします。
- 機密情報の出力を回避するために、携帯電話番号の形式を満たすオブジェクトのフィールドを暗号テキストに置き換えます。
- 実現された
IEnumerable<int>
すべてのプロパティを合計し ます。
「Newbe.ObjectVisitorサンプル1」を参照してください。
簡単な説明
Newbe.ObjectVisitorは、開発者が最も簡単で効率的な方法で通常のクラスのすべての属性にアクセスするのに役立ちます。達成するために:検証、マッピング、収集およびその他の操作。
たとえば、コードにはそのような単純なクラスがあります。
var order = new OrderInfo();
このクラスのすべての属性と値を出力する場合は、リフレクションを使用して以下を完了することができます:
用( VAR pInfoは で typeof演算(ORDERINFO)。 GetPropertiesの()) {コンソール。WriteLineに( $ " { pInfoは。名}:{ pInfoは。GetValueメソッド(オーダー)} "); }
このライブラリを使用すると、次の方法で同じ効果を得ることができます。
//静的拡張メソッドとは何か.Vを呼び出し ます// order var visitor = orderのvisitorオブジェクトを取得します。V(); ビジター。ForEach(コンテキスト=>{ VARの名前=文脈。名、 VaRの値=文脈。値; コンソール。WriteLineに( $ " {名}:{値} "); })。実行(); // 1行の 順序にすることもできます。V()。ForEach(C=> コンソール。WriteLineに( $ " { C。名}:{ C。値} "))。実行(); //またはクイックスタイルオーダーを使用します。FormatToString();
では、なぜこれを行う必要があるのでしょうか。
- 速いから!このライブラリは式ツリーを使用して実装されているため、リフレクションを直接使用するよりも10倍高速です。
- 読みやすいから!このライブラリを通じて、チェーンAPIと命名メソッドを使用してデリゲートを作成できるため、コードはハードコードされたものと同じ読み取り可能な効果を実現できます。
- よりスケーラブルだから!このクラスライブラリを使用すると、クラスのすべてのプロパティに簡単にアクセスできます。したがって、次のような多くのことを行います。モデルを検証するためのバリデーターの作成、ログへの出力を回避するために機密データを含む可能性のあるいくつかの属性の変更、AutoMapperと同様のオブジェクトマッパーの作成。パフォーマンスの向上など。
GitHubプロジェクトアドレス:https://github.com/newbe36524/Newbe.ObjectVisitor
Giteeプロジェクトのアドレス:https://gitee.com/yks/Newbe.ObjectVisitor