سؤال

لديّ قطعة رمز في C#:

private static void _constructRow(SqlDataReader reader, system.IO.StreamWriter stwr, bool getColumnName)
{
  for (int i = 0; i < reader.FieldCount; i++)
   stwr.Writeline(String.Format("<td>{0}</td"), getColumnName ? reader.GetName(i) : reader.GetValue(i).ToString()));
}

أحاول أن أفهم ما هو الجزء الذي يبدأ بـ "getColumnName؟" وينتهي بـ ".ToString ()". لقد فهمت أنه نظام. نوع الكائن ، لكن ليس لدي أي فكرة عما يفعله على وجه التحديد أو كيف يعمل. أريد ذلك بسبب هذا: كان "القارئ" صفوفًا متعددة فيه ، وأريد أن أكتب صفوفًا محددة فقط.

إذا كان بإمكان أي شخص مساعدتي في أي من هؤلاء ، سأكون ممتنًا.

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

المحلول

تكرر الوظيفة على جميع الأعمدة في قارئ البيانات ، ثم لكل واحدة:

لو getColumnName إرجاع صحيح ، فإنه يخرج اسم العمود بين <td> العلامات ، وإلا قيمة البيانات.

لمزيد من البناء:

reader.GetName(i) - this returns the name of the column

reader.GetValue(i).ToString() - this returns the value of the column as a string

getColumnName - a function the will return true if a column name can be gotten

?: - the conditional operator. If the expression before the ? is true, the expression to the left of the : is used, otherwise the one on the right

String.Format("<td>{0}</td", arg) - this will output "<td>arg</td>" (btw - your code is wrong, the ) should not be just after the first string)

نصائح أخرى

هذا ال المشغل الشرطي. يقول إذا getColumnName صحيح ، ثم الاستخدام reader.GetName(i) خلاف ذلك استخدام reader.GetValue(i).ToString()

التنسيق هو:

ThingToCheck ? UseIfCheckIsTrue : UseIfCheckIsFalse

في الكود ، يبدو الأمر getColumnName هو حقيقي بالنسبة إلى صف الرأس ، لذلك يتم إخراج اسم العمود مرة أخرى لجميع الصفوف الأخرى باستخدام خاطئة, ، لإخراج القيم.

وهذا ما يسمى المشغل الشرطي.

الحجة getColumnName يتم تقييمه وإذا كان صحيحًا ، فإن الحجة الأولى بعد ? عاد ، إذا كان خطأ ، والثاني.

لذا ، إذا كان getColumnName == صحيح ، فسترى <td>NAME</td> آخر <td>Value</td>

منطقي؟

إنه مثل المتابعة

if (getColumnName == true)
{
    reader.GetName(i); // GetName is string so no need to convert this in string I.E ToString()
}
else
{
    reader.GetValue(i).ToString(); // GetValue returns object so this needs to convert in string using .ToString()
}

لأن getColumnName من نوع منطقي ، لذا لا حاجة لاختباره مثل

If (getColumnName == true)

يمكنك كتابة هذا على أنه

If (getColumnName)

String.Format (سلسلة ، طريقة)

و string.Format Method يستبدل العناصر الموجودة في السلسلة المحددة مع كائن معين ، تحتوي هذه الطريقة على وسيطين أولاً على سلسلة والثانية كائن. علي سبيل المثال

string.Format("Question number {0} is answered by {1} {2}", 11, "Adam", "Yesterday");

سيكون وضع خارج

تم الإجابة على السؤال 11 من قبل آدم أمس

كما ترون {0} يتم استبداله بـ 11 ويتم استبدال {1} بـ Adam و {2} يتم استبداله بالأمس.

يمكنك قراءة المزيد عن هذا هنا

هذا هو عامل ثلاثي, ، تستخدم لدستور adhoc من IF كتلة أخرى.

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