باستخدام أنواع مختلفة في بيان باستخدام (C #)

StackOverflow https://stackoverflow.com/questions/966086

  •  12-09-2019
  •  | 
  •  

سؤال

نظرا لأن C # باستخدام العبارة هو مجرد سكر نصني لمحاولة / أخيرا {discose} لماذا يقبل كائنات متعددة فقط إذا كانت من نفس النوع؟

أنا لا أفهم ذلك لأن كل ما يحتاجون إليه هو ناهض. إذا كان كل منهم ينطبقون ناهلا على أنه يجب أن يكون على ما يرام ولكن ليس كذلك.

على وجه التحديد أنا معتاد على الكتابة

using (var cmd = new SqlCommand())
{
    using (cmd.Connection)
    {
        // code
    }
}

التي أنا مدمجة في:

using (var cmd = new SqlCommand())
using (cmd.Connection)
{
    // code
}

وأود أن مدمجة علاوة على ذلك

using(var cmd = new SqlCommand(), var con = cmd.Connection)
{
    // code
}

لكنني لا أستطيع. ربما يمكن أن يقول البعض، اكتب:

using((var cmd = new SqlCommand()).Connection)
{
    // code
}

منذ كل ما أحتاج إلى التخلص منه هو الاتصال وليس الأمر ولكن هذا إلى جانب النقطة.

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك على الرغم من:

using (IDisposable cmd = new SqlCommand(), con = (cmd as SqlCommand).Connection)
{
   var command = (cmd as SqlCommand);
   var connection = (con as SqlConnection);
   //code
}

ربما سيكون ذلك مرضيا لك.

نصائح أخرى

ليس هناك سبب تقني جيد بشكل خاص؛ كان بإمكاننا التوصل إلى بناء جملة سمحت بإعلانات متعددة لأنواع غير غير منظم. نظرا لأننا لم نفعل ذلك، وهناك بالفعل آلية جيدة تماما وواضحة ومفهومة ومفهومة إلى حد ما للإعلان عن المتداخلة باستخدام كتل من أنواع مختلفة، فمن غير المرجح أن تضيف نسبة نسائية جديدة فقط لحفظ عدد قليل من المفاتيح.

يسمح لك تصريحات متغيرة أخرى في C # فقط بإعلان متغيرات متعددة من نفس النوع في نفس العبارة؛ لا ارى لماذا using يجب أن تكون الرؤوس مختلفة.

طريقة بلدي الشخصية لاستخدام هذا قد تناسب الفاتورة:

private const string SQL_CONNECTION = "Your Connection String Here";

private void Test(string sqlCmd)
{
  using (var cmd = new SqlCommand(sqlCmd, new SqlConnection(SQL_CONNECTION)))
  {
    cmd.Connection.Open();
    cmd.ExecuteNonQuery();
    cmd.Connection.Close();
    // Close() is not really necessary.
    // Dispose will Close the connection.
  }
}

لا، هذه ليست حالتين من using جملة في سطر واحد، ولكنها مدمجة كما تحاول الدخول في مثالك.

ما هو أكثر من ذلك، يمكنك جعل هذا أكثر ضغطا ومبرمجا أكبر من خلال تحويل سلسلة الاتصال الخاصة بك إلى خاصية خاصة:

private SqlConnection OpenConnection
{
  get {
    var con = new SqlConnection(SQL_CONNECTION);
    con.Open();
    return con;
  }
}

الآن، هذا القليل الأول من التعليمات البرمجية أعلاه في Test() يمكن تقصير ما يلي:

private void Test2(string sqlCmd)
{
  using (var cmd = new SqlCommand(sqlCmd, OpenConnection))
  {
    cmd.ExecuteNonQuery();
  }
}

هذا يجعل الترميز لطيفة جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top