سؤال

لدي جزء صغير من التعليمات البرمجية (انظر أدناه) الذي يعيد السلسلة:

string.Format("{0}----{1}",3,"test 2");

فكيف يمكنني الحصول على هذا في الواقع "تنفيذ"؟ لتشغيل وتنسيق/استبدال {0} و {1}؟

مقتطف الرمز الخاص بي:

StringBuilder sb = new StringBuilder();
sb.Append("{0}----{1}\",");
sb.AppendFormat(ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
string sbStr = "=string.Format(\""+sb.ToString()+");";

نعم ، يعطي ReturnParamValue القيمة الفعلية لـ DTO.

على أي حال ، لقد ألقيت نظرة على ما يلي (لكنها لا تقول كيفية تنفيذها:كيفية الحصول على string.format لا يمكن تحليل {0}

ربما ، يجب أن أضع مقتطف الرمز الخاص بي بطريقة. لكن ماذا بعد؟

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

المحلول

لماذا أنت بما في ذلك string.format في السلسلة نفسها؟

إذا كنت تبحث عن عام "اسمحوا لي أن أقيم هذا التعبير التعسفي ، فقد قمت ببنيه في سلسلة" ، فلا توجد إجابة بسيطة.

إذا كنت تبحث ، بدلاً من ذلك ، في كيفية تقديم المعلمات للسلسلة من استدعاء الوظائف ، فعليك أن تكون نفسك ملتوية وتعمل بجد.

جرب شيئًا كهذا ، استنادًا إلى الكود الأصلي الخاص بك:

string result
    = string.Format(
        "{0}----{1}",
        ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));

على الرغم من ذلك ، لن ينجح هذا تمامًا لأن الكود الأصلي الخاص بك يبدو أنه يوفر قيمة واحدة فقط ، ولديك قيمتان في سلسلة التنسيق الخاصة بك - {0} سيتم استبدالها بالقيمة من وظيفتك ، و {1} ترك دون تغيير.

ما هو الإخراج الذي تتوقعه؟

هل ReturnParamValue() وظيفة حاول إرجاع كل من التسمية والقيمة في سلسلة واحدة؟ إذا كان الأمر كذلك ، وإذا تم فصلهم عن الفاصلة ، فيمكنك تجربة هذا:

var value = ReturnParamValue(siDTO, "siDTO.SuggestionItemID,siDTO.Title"));
var pieces = string.Split(',');
string result
    = string.Format( "{0}----{1}", pieces[0], pieces[1]);

على الرغم من أن هذا يعمل بجد بجد ReturnParamValue() هي طريقة تتحكم فيها.

تحديث الجمعة 6 أغسطس

تحقق من الإعلان عن string.Format() كما هو موضح في MSDN:

public static string Format(
    string format,
    params Object[] args
)

على عكس الغلاف الخاص الذي قد شاهدته في C printf(), ، لا يوجد شيء خاص أو غير عادي حول الطريق string.Format() يتعامل مع معلمات متعددة. المفتاح هو بارامز الكلمة الرئيسية ، التي تطلب من المترجم تقديم القليل "التجميل اللغوى" حيث يجمع بين المعلمات في صفيف لك.

المفتاح هنا هو أن الالتفاف لا يحدث إذا كنت تمر بالفعل object[] - إذا أردت ذلك ، يمكنك أن تفعل شيئًا كهذا:

object[] parameters 
    = ReturnParamValues(siDTO, "siDTO.SuggestionItemID,siDTO.Title");
string result
    = string.Format("{0}----{1}----{2}", parameters);

على الرغم من ذلك ، إذا رأيت شيئًا كهذا في أي قاعدة كود التي حافظت عليها ، فسأتعامل معها على أنها رمز رمز وأبحث عن طريقة أفضل لحل المشكلة.

فقط لأنه ممكن لا يعني ذلك المستحسن. YMMV ، بالطبع.

نصائح أخرى

لا أعتقد أنه يمكنك تنفيذها. جافا ليست حقا لغة تفسير.

يمكنك الاستفادة من لغات البرمجة النصية (والتي يمكن أن تتضمن حتى في تطبيق Java كما أعرف ، ابدأ من JDK6) لهذا الغرض ، مثل Groovy

يمكنك استخدام Regex لتحليل المعلمات الثلاثة من السلسلة ، ثم تمريرها إلى سلسلة حقيقية وفعلية.

يبدو أن ما تريده هو شيء من هذا القبيل:

string sbStr = string.Format("{0}----{1}", siDTO.SuggestionItemID, siDTO.Title);

ربما لم أفهم سؤالك تمامًا ، لكن يبدو أنك بحاجة إلى تنسيق سلسلة التنسيق. إذا كان هذا صحيحًا ، يمكنك تجربة شيء مثل هذا:

int width = 5;
string format = String.Format("{{0,{0}}}----{{1,{0}}}", width);
string result = String.Format(format, "ab", "cd");

لذا فإن الحيلة هي ببساطة الهروب من { أو } باستخدام مزدوج {{ أو }}.

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