কোনও () বিবৃতি ব্যবহার করে ভিতরে ফিরে আসার কোনও পার্শ্ব প্রতিক্রিয়া রয়েছে কি?


125

ডেটা কনটেক্সট পেয়ে এমন একটি স্টেটমেন্টের অভ্যন্তর থেকে কোনও পদ্ধতির মান ফিরিয়ে দেওয়া সর্বদা সূক্ষ্মভাবে কাজ করে বলে মনে হয় , এর মতো:

public static Transaction GetMostRecentTransaction(int singleId)
{
    using (var db = new DataClasses1DataContext())
    {
        var transaction = (from t in db.Transactions
                              orderby t.WhenCreated descending
                              where t.Id == singleId
                              select t).SingleOrDefault();
        return transaction;
    }
}

তবে আমি সর্বদা মনে করি যে বন্ধনীগুলি ব্যবহারের আগে ব্রেক করার আগে আমার কোনও কিছু বন্ধ করা উচিত , উদাহরণস্বরূপ ব্যবহারের স্টেটমেন্টের আগে লেনদেনকে সংজ্ঞায়িত করে, বন্ধনীর ভিতরে এর মান পাওয়া উচিত এবং পরে বন্ধনীগুলির পরে ফিরে আসা উচিত ।

ব্যবহারের বন্ধনীগুলির বাইরে ভেরিয়েবলটি সংজ্ঞায়িত এবং ফিরিয়ে দেওয়া কি কোনও উপায়ে রিসোর্সগুলি সংরক্ষণ করা ভাল অনুশীলন হতে পারে?


1
এর বিভিন্ন রূপগুলির জন্য সাধারণ আইএলটির দিকে নজর দেওয়া আকর্ষণীয় হতে পারে। আমি সন্দেহ করি যে উত্পন্ন আইএলটিতে সামান্য পার্থক্য হবে। আমি সাধারণত বৈবাহিক লেনদেন ঘোষণার বিরক্তিও করতাম না - কেবল প্রকাশের ফলাফলটি ফিরিয়ে দিন।
জোনসি

উত্তর:


164

না, আমি মনে করি এটি এভাবে পরিষ্কার হয়। চিন্তা করবেন না, না কি Dispose"পথ এ" এখনও বলা হবে - এবং সেগুলি শুধুমাত্র পর ফেরত মান সম্পূর্ণরূপে মূল্যায়ন করা হয়। যদি কোনও ব্যতিক্রম ছুঁড়ে ফেলা হয় (রিটার্ন মান মূল্যায়ন সহ) Disposeএখনও বলা হবে।

আপনি অবশ্যই দীর্ঘতর পথটি নিতে পেরেছিলেন , এটি দুটি অতিরিক্ত লাইন যা কেবল মানসিকভাবে ট্র্যাক রাখতে ক্রাফ্ট এবং অতিরিক্ত প্রসঙ্গ যুক্ত করে। আসলে আপনার অতিরিক্ত স্থানীয় পরিবর্তনশীলের দরকার নেই - যদিও এটি ডিবাগিংয়ের ক্ষেত্রে কার্যকর হতে পারে। আপনি ঠিক থাকতে পারে :

public static Transaction GetMostRecentTransaction(int singleId)
{
    using (var db = new DataClasses1DataContext())
    {
        return (from t in db.Transactions
                orderby t.WhenCreated descending
                where t.Id == singleId
                select t).SingleOrDefault();
    }
}

প্রকৃতপক্ষে, আমি এমনকি বিন্দু স্বরলিপি ব্যবহার করার জন্য প্রলুব্ধ হতে পারি এবং Whereশর্তটি এর মধ্যে রাখি SingleOrDefault:

public static Transaction GetMostRecentTransaction(int singleId)
{
    using (var db = new DataClasses1DataContext())
    {
        return db.Transactions.OrderByDescending(t => t.WhenCreated)
                              .SingleOrDefault(t => t.Id == singleId);
    }
}

2
সাইন আপনি এটি @ জোন, যদি কোনও ব্যবহারের ব্লকের ভিতরে কোনও ব্যতিক্রম ছড়িয়ে পড়ে তবে কী এটি নিরাপদ?
ডেভ আর্চার

6
হ্যাঁ. ব্যবহার করার চেষ্টা / শেষ অবধি নির্মাণের জন্য কেবল সিনট্যাকটিক চিনিযুক্ত
মিচ গম

@ ডেভিড: মিচ যেমন বলেছেন, ঠিক আছে - আমি পরিষ্কারটি করার জন্য উত্তরটি আপডেট করেছি :)
জন স্কিটি

2
সিঙ্গলঅরডিফল্টের সাথে মিলিয়ে অর্ডারবাইডিসেন্ডিং কেন ব্যবহার করবেন?
এরিককালেন

2
@ এরিক্কাল্লেন: লিনকিউতে "ম্যাক্সবি" নেই, দুর্ভাগ্যক্রমে - যাতে আপনি সর্বাধিক মান দিয়ে সারিটি পেতে পারেন না। লিংক টু অবজেক্টের জন্য আপনি নিজের নিজের মোটামুটি সহজেই লিখতে পারেন, তবে এই ক্ষেত্রে এটি করার আরও ভাল উপায় সম্পর্কে আমি নিশ্চিত নই। এর পরিবর্তে আপনি কী পরামর্শ করবেন?
জন স্কিটি

32

এই একবার দেখুন

সি # তে 'ব্যবহার' বিবৃতিটি বোঝা

সিএলআর আপনার কোডটি এমএসআইএলে রূপান্তর করে। এবং ব্যবহারের বিবৃতিটি চেষ্টা করে অনুবাদ করা হয় এবং অবশেষে ব্লক হয়ে যায়। আইএল-তে এভাবে ব্যবহারের বিবৃতি উপস্থাপন করা হয়। একটি ব্যবহারের বিবৃতিটি তিন ভাগে অনুবাদ করা হয়: অধিগ্রহণ, ব্যবহার এবং নিষ্পত্তি। সংস্থানটি প্রথমে অধিগ্রহণ করা হয়, তারপরে ব্যবহারটি একটি শেষ বিবরণ দিয়ে একটি চেষ্টা বিবৃতিতে সংযুক্ত থাকে। এরপরে অবজেক্টটি অবশেষে ধারাতে নিষ্পত্তি হয়।


4
একটি আকর্ষণীয় অন্তর্দৃষ্টি। ধন্যবাদ।
কংকান

1
এটি এই প্রশ্নের অনুবাদ করে: শেষ অবধি ট্রাই-ব্লক থেকে ফিরে আসার কোনও পার্শ্ব প্রতিক্রিয়া?
হেন্ক হলটারম্যান

3
না, সবশেষে সর্বদা ডাকা হবে। techinterviews.com/interview-questions-for-c-developers
অ্যাড্রিয়ান

6

আছে কোন একটি ভিতরে থেকে ফিরে পার্শ্বপ্রতিক্রিয়া using()বিবৃতি।

এটি সর্বাধিক পঠনযোগ্য কোড তৈরি করে কিনা তা অন্য আলোচনা another


0

আমি মনে করি, এটি সব একই রকম। কোডে খারাপ কিছু নেই। .NET ফ্রেমওয়ার্কটি যেখানে বস্তুটি তৈরি হয়েছে সেদিকে খেয়াল রাখে না। যে বিষয়টি গুরুত্বপূর্ণ তা হ'ল এটি রেফারেন্সযুক্ত কিনা।


-1

হ্যাঁ, এর পার্শ্ব প্রতিক্রিয়া হতে পারে। উদাহরণস্বরূপ, আপনি যদি এএসপি.নেট এমভিসি অ্যাকশন পদ্ধতিতে একই কৌশলটি ব্যবহার করেন তবে আপনি নিম্নলিখিত ত্রুটিটি পাবেন: "অবজেক্ট কনটেক্সট উদাহরণটি নিষ্পত্তি করা হয়েছে এবং কোনও সংযোগের প্রয়োজন হয় এমন ক্রিয়াকলাপগুলির জন্য আর ব্যবহার করা যাবে না"

public ActionResult GetMostRecentTransaction(int singleId)
{
    using (var db = new DataClasses1DataContext())
    {
        var transaction = (from t in db.Transactions
                              orderby t.WhenCreated descending
                              where t.Id == singleId
                              select t).SingleOrDefault();
        return PartialView("_transactionPartial", transaction);
    }
}

2
আপনি যদি বিবৃতি ব্যবহারের বাইরে লেনদেনকে সংজ্ঞায়িত করেন তবে আপনি একই ত্রুটি পাবেন। কীওয়ার্ড ব্যবহার করা এই ক্ষেত্রে সম্পর্কিত নয়।
কোস্টা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.