اشرح جزء من رمز C# وتحويله إلى vb.net
-
23-09-2019 - |
سؤال
أمس سألت هذا سؤال. روبنز فارياس أجاب عليه من خلال الإشارة إلى هذا قطعة من الكود هو كتب. لا يمكن تجميع الجزء التالي منه بواسطة MS Visual Studio 2010 Professional Beta 2.
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(),
delegate(KeyValuePair item)
{
return item.Key + "=" + HttpUtility.UrlEncode(item.Value);
})));
يعطي هؤلاء الأخطاء في Visual Studio. لسوء الحظ ، لم يعد روبنز يرد بعد الآن.
لذلك لدي الأسئلة / الطلبات التالية:
- لا أفهم هذه الرمز ، يرجى توضيح ما يحدث بالضبط.
- يرجى توضيح كيف يتم إعادة كتابة هذا الجزء من أجل "العمل" في VS.
- يرجى توضيح كيف يجب أن أقوم بتحويله إلى vb.net. لقد جربته باستخدام المحولات عبر الإنترنت دون جدوى.
المحلول
- يتطلب keyvaluepair وسيطتين من النوع. في إعلان المندوب الخاص بك يقول ببساطة
KeyValuePair item
, ، مع عدم وجود حجج نوع. تغيير هذا إلىdelegate(KeyValuePair<string,string> item)
HttpUtility
تم إعلانه فيSystem.Web
مساحة الاسم يضيفusing System.Web;
إلى استخدام العبارات في بداية الملف.
أنا شخصياً أجد أنه من الأسهل والنظافة استخدام نمط Lambda لهذا النوع من التعليمات البرمجية:
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(), (item) => item.Key + "=" + HttpUtility.UrlEncode(item.Value))));
بمجرد الحصول على رمز C# للعمل ، التطور C# إلى vb.net يقوم المحول بالوظيفة:
' Converted from delegate style C# implementation '
Dim buffer As Byte() = Encoding.UTF8.GetBytes( _
[String].Join("&", _
Array.ConvertAll(Of KeyValuePair(Of String, String), String)(inputs.ToArray(), _
Function(item As KeyValuePair(Of String, String)) (item.Key & "=") + HttpUtility.UrlEncode(item.Value))))
' Converted from Lambda style C# implementation '
Dim buffer As Byte() = Encoding.UTF8.GetBytes( _
[String].Join("&", _
Array.ConvertAll(Of KeyValuePair(Of String, String), String)(inputs.ToArray(), _
Function(item) (item.Key & "=") + HttpUtility.UrlEncode(item.Value))))
نصائح أخرى
byte[] buffer =
Encoding.UTF8.GetBytes(
String.Join("&",
Array.ConvertAll<KeyValuePair<string, string>, string>(
inputs.ToArray(),
delegate(KeyValuePair<string, string> item)
{
return item.Key + "=" + System.Web.HttpUtility.UrlEncode(item.Value);
})));
جرب ذلك.
يبدو أن الرمز يقوم ببناء قائمة طلب الحصول على العناصر على سبيل المثال
key1=value1&key2=value2
. يتم ذلك عن طريق تحويل أولاًinputs
صفيف في عناصر فرديةkey=value
من ثمString.Join
جي مع ampersand. ثم يعيد بايت UTF8 في صفيف.هذا يعمل (انظر الكود).
أنا لست مبرمجًا VB.NET ، آسف ، لكنني سأذهب في الثانية.
إنه يقوم بتحويل قائمة المدخلات التي تحتوي على أزواج مفتاح/قيمة إلى سلسلة تشبه إلى حد كبير سلسلة استعلام (على سبيل المثال. item1 = value1 & item2 = value2) ، ثم تحويل ذلك إلى صفيف بايت المخزن المؤقت باستخدام ترميز UTF8.
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim inputs As New List(Of KeyValuePair(Of String, String))
inputs.Add(New KeyValuePair(Of String, String)("a", "adata"))
Dim buffer As Byte() = _
Encoding.UTF8.GetBytes( _
String.Join("&", _
Array.ConvertAll(Of KeyValuePair(Of String, String), String)( _
inputs.ToArray(), _
Function(item As KeyValuePair(Of String, String)) _
item.Key & "=" & HttpUtility.UrlEncode(item.Value) _
)))
End Sub
End Class