out

using System;

namespace test_cs1
{
    class MainClass
    {
        private static void Seifuku(out string a, out string b)
        {
            a = "水色の";
            b = "セーラー服";
        }
        public static void Main(string[] args)
        {
            string s = "紺色の";
            string t = "ブレザー";
            Seifuku(out s, out t);
            Console.WriteLine(s + t);
            Console.Read(); //閉じないように
        }
    }
}

なんだ、ref で string を参照渡しがどーのとか以前書いたがこうすればイイんだ。
引数指定の両方に out を付けるだけね、ふんふん。

この方法ならば C/C++ っぽく書ける、無理に C/C++ っぽくする必要は無いと思うけど。
どうしても戻り値に string を使いたくない場合があるのよ。
とにかくコレで IniFile8 C# 版も同様の処理が可能になるな。

常識だったりして…
個人的には yield return 並に衝撃だったんだけど…
C# はまだ始めて三ヶ月なのでまあこんな感じです。

#include <stdio.h>

void Seifuku(char *a, char *b)
{
	sprintf_s(a, 256, "%s", "水色の");
	sprintf_s(b, 256, "%s", "セーラー服");
}
int main(int argc, char* argv[])
{
	char s[256];
	char t[256];
	sprintf_s(s, 256, "%s", "紺色の");
	sprintf_s(t, 256, "%s", "ブレザー");
	Seifuku(s, t);
	printf("%s%s\n", s, t);
	getchar(); //閉じないように
}

こんなコードに比べたら遙かに解りやすい構文だし。

試しに mono でもやってみたけど普通にコンパイル完了。
なるほど、C# 言語仕様は見事にトレースしているんだ。

つーか

Mono って StreamReader も foreach 文も Windows と全く同様に扱える。
それどころか Generic も同じように問題無く使える。
ココまで再現していると思わなかった、違うのは GUI 部分だけだ。
こりゃどっちでも使えるライブラリを作らなきゃ損って気分。

何をやろうとしているかは何となく解るでしょう。