🚨7つの間違いはC Count -プログラマーによって作りました🎁プレゼント

12151 ワード

開発者は常に間違いをするつもりはない、誰も完璧です.それらの多くは、特にCの経典開発者は、学び、試行錯誤によって改善されます.私はジュニア開発者からシニア開発者への“移行”と呼ぶのが好きです.
この試行錯誤“戦略”が動作しますが、開発者がミスをキャッチしない場合、それらは多くの効率と品質の問題を開発ソフトウェアで引き起こす可能性があります.
この記事では、私は多くのCのほとんどの一般的なミスを集めている.

❌ 1文字列連結の使用法
文字列連結関数の働き方はとても分かりやすい👇
何かがストリングに加えられるたびに、新しいアドレスは自動的にメモリに割り当てられます.前の文字列は変更された場所で新しい部分にコピーされます(これは全く効率的ではありません).畝
ASPIRESYSからとられる例を見ましょう👇
List dotnetsaferTools = new List(){"Shield","Secrets","Linker"};
string tools = string.Empty;
foreach (var tool in dotnetsaferTools)
{   
  tools += tool; // Creates a copy of the string in memory
}

✅ 解決策
これを解決する方法は簡単ですが、文字列集約の代わりにStringBuilderオブジェクトを使用しなければなりません.
これにより、文字列連結プロセスは非常に簡単で効率的になります.
このように見える👇
StringBuilder toolsBuilder = new StringBuilder();
foreach (var tool in dotnetsaferTools)
{
  toolsBuilder.Append(tool);
}

❌ 2 . rel linqの代わりに値を用いた反復処理
このエラーは、ループでレコードのリストを反復しようとすると、最適ではありません.
foreach (Customer customer in CustomerList) {
  if (customer.State == "ES") {
    tax += customer.Balance;
  }
}

✅ 解決策
これを行う代わりに、単純にオブジェクトを問い合わせるLINQを使うべきです.
tax = CustomerList.Where(customer => customer.State.Equals("ES")).Sum(c=>c.Balance);

📚 This is more efficient than a foreach loop.



❌ yield count returnを使用しない
これは、他の呼び出し元のオブジェクト列挙を作成する必要があるときです.この関数を使用するとパフォーマンスが大幅に向上します.

✅ 解決策
この間違いを避けるためには、戻り値のコレクションを作成しようとしないでください.yield returnを使用する大きな利点は、コレクション全体がメモリに格納される必要はないことです.
これにより、各反復処理の後に制御を行うことができ、必要な結果を処理するだけで、必要な処理を行うことができます.

❌ RUNQにおける遅延実行
LINQの主なものはforeachループを使用した場合のデータの問い合わせを容易にするためです(例:ブロックの場合は入れ子になります).クライアントのリストを取得するには、LINQ to SQLを使用することをお勧めします.
public IEnumerable GetCustomers()
{
  using(var context = new DBContext())
  {
    return from c in context.Customers
      where c.Balance > 2000
      select c;
  }
}
万事うまくいっているようですね.コレクションを列挙しようとするまで(例外を返します).
何が起こるかは、結果を列挙しようとするまで、LINQはどんなクエリも実行しないことです.

✅ 解決策
解決策は単純ですが、すべてのLINQクエリをtoarray()に変換するだけです.こうすることにより、LINQは何かの前にクエリを評価するべきです.

❌ コンストラクタ内の仮想メンバーへのアクセス
このエラーは最初の1つではありませんが、それはそうではないかもしれませんが、最も一般的なの一つです.畝
オーバーライドされたメソッドが基本クラスのコンストラクターから直接呼び出されると、このエラーが表示されます.
public class Parent
{
  public Parent()
  {
    Console.WriteLine("Parent Ctor");
    Method();
  }

  public virtual void Method()
  {
    Console.WriteLine("Parent method");
  }
}

public class Child : Parent
{
  public Child()
  {
    Console.WriteLine("Child Ctor");
  }

  public override void Method()
  {
    Console.WriteLine("Child method");
  }
}

✅ 解決策
それは非常に複雑に見えるかもしれないが、それは実際には非常に簡単です.我々は、単にそのクラスを密封するようにマークしなければなりません.

What does this do? 🤔


これを行うことによって、我々が仮想メソッドを呼ぶとき、我々はどんな警告も受けないことを確認します.

❌ 6 .オブジェクトの使用の重要性を知らない
Partechとして.NLは言います、多くのC Chenhn開発者は使用キーワードが名前空間を加えるための指示としてだけでなく、オブジェクト除去のために非常に有益であるという概念に慣れていません.

✅ 解決策
特定のアクションを実行するときにオブジェクトを削除する必要がある場合は、単にuseステートメントを使用して、オブジェクトが正しく削除されていることを確認します.
例を見ましょう👇
using(DisposableClass DisposableObject = new DisposableClass())
{
  DisposableObject.DoTheJob();
}
// Does the same as:
DisposableClass DisposableObject = new DisposableClass();
try
{
  DisposableObject.DoTheJob();
}
finally
{
  DisposableObject.Dispose();
}

❌ 弱暗号アルゴリズムの使用
ここで、我々はStackifyに同意します、この誤りは単に多くの開発者が時代遅れであるか脆弱な暗号化アルゴリズムを使用するという事実に基づいています(非常に避けやすいです).
この場合、SHA 1またはRIPMD 160の例がありますが、これは現在のセキュリティレベルを提供しません.
using System.Security.Cryptography;   
...   
var hashAlg = SHA1.Create();

✅ 解決策
この解決策は、例えば、より強力な暗号化アルゴリズムを使用することです.

  • SHA 1の代わりにSHA 256

  • RIPMD 160の代わりにSHA 512

  • 三重の代わりにAES

  • 🎁 あなたは贈り物が欲しいですか?
    あなたがこれを読んでいるならば、それはあなたが終わりまで記事を読む人々の1 %に属していることを意味します、そして、あなたは贈り物を得ます🎁!!!! しかし、最初に、あなたはユニコーンを与えなければなりません🦄 それで、私は、誰が記事を読む忠実な人であるかを知っています💜).
    ちょうどこの記事を入力し、それを今までのために、私はあなたにあなたの保つためのガイドの贈り物を与えている.NETアプリケーション🎁.

    あなたがしなければならない唯一のことは無料でそれを受け取るためにあなたの電子メールを入力することです🤑.
    🚨 これは永遠にはないだろう.
    排他性を維持するために、私はすぐに記事を編集するつもりです、そして、もはや贈り物がありません.だから急いで、あなたのガイドを得るためになる.ネットセキュリティの専門家!👇👇👇
    Download FREE guide 🎁