【解決方法】C# 汎用関数、変換できません


このC#関数があります

C#
internal static SortedList<string, string> doSList(string list)
        {
            SortedList<string, string> ret = new SortedList<string, string>();

            char[] charSeparators = new char[] { '|' };
            string[] l1 = list.Split('|');
            if (l1.Count() > 0)
            {
                foreach (string ll1 in l1)
                {
                    string[] l2 = ll1.Split(';');

                    if (l2.Count() == 2)
                    {
                        {
                            //ret.Add(Convert.ChangeType(l2[0], typeof(key)), Convert.ChangeType(l2[1], typeof(value)));
                            ret.Add(l2[0], l2[1]);
                        }
                    }
                }
            }
            return ret;
        }

それから、しばらくしてから要求します。

C#
internal static SortedList<string, int> doSList2(string list)

私が試したこと:

それで私はそれをしましたが、VB.net仲間はそれを行うことができました

VB
Friend Shared Function doSList(Of key, value)(ByVal list As String) As SortedList(Of key, value)

しかし、私にはできません:

C#
<pre>internal static SortedList<TKey, TValue> doSList2(string list)

エラーは、TKey が見つかりません、TValue が見つかりませんと言うので、T のみで試してみましたが、T が見つかりませんでした。

初心者の質問かもしれません。誰かが私をこれに導いてください。どこで学べるリンクはありますか?

解決策 1

キーが常に string 入力はカンマ区切り値形式であるため、 これらの線に沿った何かがうまくいくはずです。

C#
public static SortedList<string, TValue> DoSList<TValue>(string csv) where TValue : IConvertible
  {
    SortedList<string, TValue> target = new ();
     string[] firstSplitArray = csv.Split('|');
      if (firstSplitArray.Length > 0)
       {
        foreach (string t1Instance in firstSplitArray)
         {
          string[] secondSplitArray = t1Instance.Split(';');

          if (secondSplitArray.Length == 2)
           {
            {
              var result= (TValue)Convert.ChangeType(secondSplitArray[1], typeof(TValue));
              target.Add(secondSplitArray[0], result);
            }
           }
         }
       }
     return target;
   }

次のように使用できます:-

C#
string testStr = "Y;5|X;6|W;7|V;8|A;1|B;2|C;3|D;4";
 SortedList<string, int> sortedList = DoSList<int>(testStr);
 foreach (var kvp in sortedList)
 Console.WriteLine($"{kvp.Key}:{kvp.Value}");

コメント

タイトルとURLをコピーしました