c# comparison - أقصر طريقة للتحقق من القيمة الفارغة وتعيين قيمة أخرى إن لم يكن




operators in (9)

أقوم بسحب قيم varchar من قاعدة بيانات وتريد تعيين string أقوم بتعيينها كـ "" إذا كانت null . أنا أفعلها حاليًا كما يلي:

if (string.IsNullOrEmpty(planRec.approved_by) == true)
  this.approved_by = "";
else
  this.approved_by = planRec.approved_by.toString();

يبدو أن هناك طريقة للقيام بذلك في سطر واحد مثل:

this.approved_by = "" || planRec.approved_by.toString();

ومع ذلك لا يمكنني العثور على طريقة مثالية للقيام بذلك. هل هناك طريقة أفضل أم أن لدي أفضل طريقة للقيام بذلك؟


Answers

جرب هذا:

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();

يمكنك أيضًا استخدام عامل التجميع الخالي كما قال آخرون - بما أنه لم يقدم أحد مثالًا يعمل مع شفرتك هنا:

this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();

ولكن هذا المثال لا يعمل إلا لأن القيمة المحتملة لهذا. this.approved_by هي نفسها كواحدة من القيم المحتملة التي ترغب في تعيينها لها. في جميع الحالات الأخرى ، ستحتاج إلى استخدام المشغل الشرطي كما أظهرته في المثال الأول.


لتعيين متغير غير فارغ بدون تكرار اسم المتغير الفعلي (ودون تعيين أي شيء إذا كان المتغير فارغًا!) ، يمكنك استخدام أسلوب مساعد صغير بمعلمة Action :

public static void CallIfNonEmpty(string value, Action<string> action)
{
    if (!string.IsNullOrEmpty(value))
        action(value);
}

ثم استخدمها فقط:

CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);

كنت تبحث عن مشغل التجميع C #: ؟؟ يأخذ هذا المشغل حجة اليسار واليمين. إذا كان الجانب الأيسر للمشغل خاليًا أو فارغًا بدون قيمة ، فسيعرض الوسيطة الصحيحة. وإلا فإنه سيعود إلى اليسار.

var x = somePossiblyNullValue ?? valueIfNull;

مع C # 6 هناك طريقة أقصر قليلاً للحالة حيث planRec.approved_by ليس سلسلة:

this.approved_by = planRec.approved_by?.ToString() ?? "";

يمكنك أيضًا إجراء ذلك في طلب البحث ، على سبيل المثال في خادم SQL ، و google ISNULL ووظائف CASE المضمنة.


أنا استخدم طريقة extention SelfChk

static class MyExt {
//Self Check 
 public static void SC(this string you,ref string me)
    {
        me = me ?? you;
    }
}

ثم استخدم مثل

string a = null;
"A".SC(ref a);

استخدم مشغل التجميع C #: ؟؟

// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YournullValue;


الحل الوحيد الذي عمل بالنسبة لي عند استخدام مشاركات CodeBase و UNC Network كان:

System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);

يعمل أيضًا مع عناوين URI العادية أيضًا.





c# .net null variable-assignment